📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
編集の要約なし |
|||
| (同じ利用者による、間の3版が非表示) | |||
| 4行目: | 4行目: | ||
== 外部コマンドの使用可否 == | == 外部コマンドの使用可否 == | ||
==== type -Pコマンド ==== | |||
以下の例では、pythonコマンドの使用可否を確認している。<br> | 以下の例では、pythonコマンドの使用可否を確認している。<br> | ||
<br> | <br> | ||
| 10行目: | 11行目: | ||
<br> | <br> | ||
そのまま実行すると<コマンド名のフルパスが出力されるので、/dev/nullデバイスへリダイレクトして、出力を抑制している。<br> | そのまま実行すると<コマンド名のフルパスが出力されるので、/dev/nullデバイスへリダイレクトして、出力を抑制している。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
if type -P python > /dev/null; then | if type -P python > /dev/null; then | ||
echo "python コマンドを使用できます" | echo "python コマンドを使用できます" | ||
| 16行目: | 17行目: | ||
echo "python コマンドが見つかりません" | echo "python コマンドが見つかりません" | ||
fi | fi | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
また、指定した外部コマンドが使用できない場合、シェルスクリプトを終了させるには、以下のように記述すればよい。<br> | また、指定した外部コマンドが使用できない場合、シェルスクリプトを終了させるには、以下のように記述すればよい。<br> | ||
| 22行目: | 23行目: | ||
<br> | <br> | ||
また、<code>echo</code>の出力を<code>>&2</code>とリダイレクトすると、標準エラー出力へ出力できる。<br> | また、<code>echo</code>の出力を<code>>&2</code>とリダイレクトすると、標準エラー出力へ出力できる。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
if ! type -P python3 > /dev/null; then | if ! type -P python3 > /dev/null; then | ||
echo 'This script requires Python 3. Please install Python 3 first and try again.' >&2 | echo 'This script requires Python 3. Please install Python 3 first and try again.' >&2 | ||
exit -1 | exit -1 | ||
fi | fi | ||
</ | </syntaxhighlight> | ||
<br> | |||
==== command -vコマンド ==== | |||
以下の例では、aplayコマンドの存在を確認して、存在する場合はWAVファイルを再生している。<br> | |||
<syntaxhighlight lang="sh"> | |||
# aplayコマンドの存在を確認 | |||
if command -v aplay &> /dev/null; then | |||
# aplayコマンドが存在する場合、指定されたファイルが存在するか確認して、存在すれば再生 | |||
if [ -f $HOME/Login.wav ]; then | |||
aplay $HOME/Login.wav | |||
else | |||
echo "音声ファイルが見つかりません" | |||
fi | |||
else | |||
echo "aplayコマンドが見つかりません" | |||
fi | |||
</syntaxhighlight> | |||
<br> | |||
==== whichコマンド ==== | |||
whichコマンドの標準エラー出力を抑制して、コマンドの存在確認を行う。<br> | |||
<syntaxhighlight lang="sh"> | |||
which <コマンド名> 2>/dev/null | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# 例 : gitコマンドのパスを確認 | |||
# 存在する場合のみパスを表示 | |||
which git 2>/dev/null | |||
# 例 : 存在しないコマンドを確認 | |||
# 何も表示されない | |||
which nonexistentcommand 2>/dev/null | |||
</syntaxhighlight> | |||
<br> | |||
また、コマンドの存在確認を条件分岐に使用することもできる。<br> | |||
<syntaxhighlight lang="sh"> | |||
# gitコマンドが存在するか確認 | |||
if which git >/dev/null 2>&1; then | |||
echo "gitコマンドが利用可能です" | |||
else | |||
echo "gitコマンドが見つかりません" | |||
fi | |||
</syntaxhighlight> | |||
<br> | |||
以下の例で使用している<code>>/dev/null 2>&1</code>は、標準出力を破棄して、標準エラー出力を標準出力と同じ場所 (この例では、/dev/null) にリダイレクトする。<br> | |||
これにより、whichコマンドの出力を完全に抑制しながら、コマンドの存在を確認することが可能となる。<br> | |||
<br><br> | <br><br> | ||
| 37行目: | 83行目: | ||
<br> | <br> | ||
以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。<br> | 以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
FILES=$(ls) | FILES=$(ls) | ||
echo "$FILES" | echo "$FILES" | ||
</ | </syntaxhighlight> | ||
または<br> | または<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
FILES=`ls` | FILES=`ls` | ||
echo "$FILES" | echo "$FILES" | ||
</ | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
| 56行目: | 102行目: | ||
<br> | <br> | ||
以下の例では、カレントディレクトリ下の.shファイルを再帰的に列挙している。<br> | 以下の例では、カレントディレクトリ下の.shファイルを再帰的に列挙している。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
find . -name '*.sh' | while read SHFILE; do | find . -name '*.sh' | while read SHFILE; do | ||
echo "$SHFILE" | echo "$SHFILE" | ||
done | done | ||
</ | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
| 68行目: | 114行目: | ||
forループのinの後の変数(以下の例では、変数SHFILES)には、スペース区切りで各要素が列挙される。<br> | forループのinの後の変数(以下の例では、変数SHFILES)には、スペース区切りで各要素が列挙される。<br> | ||
変数SHFILESの値にスペースが含まれる場合、行を1つの要素として処理するためには、変数をダブルクォーテーションで囲む必要がある。<br> | 変数SHFILESの値にスペースが含まれる場合、行を1つの要素として処理するためには、変数をダブルクォーテーションで囲む必要がある。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
SHFILES=$(find . -name '*.sh') | SHFILES=$(find . -name '*.sh') | ||
| 74行目: | 120行目: | ||
echo "$SHFILE" | echo "$SHFILE" | ||
done | done | ||
</ | </syntaxhighlight> | ||
<br><br> | |||
== 日時 == | |||
<code>date</code>コマンドを使用すると、現在時刻を表す文字列を自由なフォーマットで取得することができる。<br> | |||
例えば、時刻入りの簡単なログを出力する場合やバックアップを作成する時のファイル名の構成のために使用する。<br> | |||
<br> | |||
以下の例では、<code>date</code>コマンドを使用して、日付からYYYYMMDD-HHMMSSのような文字列を作成している。<br> | |||
date +%Y%m%d-%H%M%S | |||
20200101-083015 | |||
<br> | |||
以下の例では、現在日時をファイル名に付加してファイルのコピー(バックアップ)を行っている。<br> | |||
cp Sample.txt Sample_`date +%Y%m%d`.txt | |||
# 出力 | |||
ls | |||
Sample.txt | |||
Sample_20050102.txt | |||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:シェルスクリプト]] | [[カテゴリ:シェルスクリプト]] | ||