「シェルスクリプトの基礎 - 条件分岐」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

編集の要約なし
 
(同じ利用者による、間の6版が非表示)
105行目: 105行目:
<br>
<br>
<center>
<center>
'''数値の比較条件'''<br>
{| class="wikitable" style="background-color:#fefefe;"
{| class="wikitable"
|+ 数値の比較条件
|-
|-
! 条件 !! 比較内容
! style="background-color:#00ffff;" | 条件  
! style="background-color:#00ffff;" | 比較内容
|-
|-
| 数値1 -eq 数値2 || 数値1と2が等しい場合に真
| 数値1 -eq 数値2 || 数値1と2が等しい場合に真
125行目: 126行目:
<br>
<br>
<center>
<center>
'''文字の比較条件'''<br>
{| class="wikitable" style="background-color:#fefefe;"
{| class="wikitable"
|+ 文字の比較条件
|-
|-
! 条件 !! 比較内容
! style="background-color:#00ffff;" | 条件  
! style="background-color:#00ffff;" | 比較内容
|-
|-
| -n 文字列 || 文字列の長さが0より大きい場合は真
| -n 文字列 || 文字列の長さが0より大きい場合は真
141行目: 143行目:
<br>
<br>
<center>
<center>
'''ファイルの比較条件'''<br>
{| class="wikitable" style="background-color:#fefefe;"
{| class="wikitable"
|+ ファイルの比較条件
|-
|-
! 条件 !! 比較内容
! style="background-color:#00ffff;" | 条件  
! style="background-color:#00ffff;" | 比較内容
|-
|-
| ファイル1 -nt ファイル2 || ファイル1がファイル2より新しく作成・更新されていた場合は真
| ファイル1 -nt ファイル2 || ファイル1がファイル2より新しく作成・更新されていた場合は真
150行目: 153行目:
| ファイル1 -ot ファイル2 || ファイル1がファイル2より古く作成・更新されていた場合は真
| ファイル1 -ot ファイル2 || ファイル1がファイル2より古く作成・更新されていた場合は真
|-
|-
| -d ファイル || ファイルが存在してディレクトリであれば真
| -a <ファイル> || <ファイル>が存在していれば真
|-
|-
| -e ファイル || ファイルが存在していれば真
| -d <ファイル> || <ファイル>が存在してディレクトリであれば真
|-
|-
| -r ファイル || ファイルが存在して読み込み許可されていれば真
| -e <ファイル> || <ファイル>が存在していれば真
|-
|-
| -w ファイル || ファイルが存在して書き込み許可されていれば真
| -f <ファイル> || <ファイル>が存在してファイルならば真
|-
|-
| -x ファイル || ファイルが存在して実行可能であれば真
| -r <ファイル> || <ファイル>が存在して読み込み許可されていれば真
|-
| -w <ファイル> || <ファイル>が存在して書き込み許可されていれば真
|-
| -x <ファイル> || <ファイル>が存在して実行可能であれば真
|-
| -L <ファイル> || <ファイル>が存在してシンボリックリンクであれば真
|-
| -s <ファイル> || ファイルサイズが1以上であれば真
|}
|}
</center>
</center>
<br>
<br>
<center>
<center>
'''ANDとORとNOT'''<br>
{| class="wikitable" style="background-color:#fefefe;"
{| class="wikitable"
|+ AND / OR / NOT
|-
|-
! 条件 !! 比較内容
! style="background-color:#00ffff;" | 条件  
! style="background-color:#00ffff;" | 比較内容
|-
|-
| ! 条件式 || 条件式が偽なら真(NOT)
| ! 条件式 || 条件式が偽なら真(NOT)
175行目: 187行目:
|}
|}
</center>
</center>
<br>
==== if 文の応用 ====
条件式に任意のコマンドを使用する。<br>
<br>
if文は、条件式に指定したコマンドの終了ステータスを判定して、条件分岐を行う制御文である。<br>
したがって、条件式には<code>test</code>コマンド以外にも、<code>ls</code>コマンドや<code>grep</code>コマンド等の一般的なコマンドを使用することもできる。<br>
<syntaxhighlight lang="sh">
if echo "$var" | grep -sq "hoge"; then
    echo "hogeが見つかりました。"
fi
# または
if echo "$var" | grep "hoge" 1>/dev/null 2>/dev/null; then
    echo "hogeが見つかりました。"
fi
</syntaxhighlight>
<br>
多くの場合、条件式に指定するコマンドで実行結果の出力を行う必要が無いため、<br>
出力を抑制するオプションを指定するか、または、<code>1>/dev/null 2>/dev/null</code>を指定して全ての出力を非表示にするとよい。<br>
例えば、<code>grep</code>コマンドを条件式に指定する場合、<code>-s</code>オプションと<code>-q</code>オプションを同時に指定することで、エラー出力と標準出力を抑制することができる。<br>
<br>
条件式にコマンドを指定しない場合、if文により、直前のコマンドの終了ステータスを表す特殊変数<code>$?</code>を判定する。<br>
<syntaxhighlight lang="sh">
# コマンドの実行結果をif文で判定する
echo "$var" | grep -sq "hoge"
if [ $? -eq 0 ]; then
    echo "hogeが見つかりました。"
fi
</syntaxhighlight>
<br>
終了ステータスを使い回す場合は、任意の変数に格納して終了ステータスを退避することで、特殊変数<code>$?</code>が他のコマンドによって上書きされても影響を受けない。<br>
<syntaxhighlight lang="sh">
echo "$var" | grep -sq "hoge";
result=$?
# ...他の処理
if [ $result -eq 0 ]; then
    echo "hogeが見つかりました。"
fi
</syntaxhighlight>
<br>
以下の例では、スーパーユーザかどうかを確認している。<br>
スーパーユーザのIDは常に0であることを利用して、それを確認する。<br>
<syntaxhighlight lang="sh">
# スーパーユーザのみシェルスクリプトの実行を許可する場合
if [ "$(id -u)" -ne 0 ]; then
    echo -e "スーパーユーザではありません"
    exit 1
fi
# 一般ユーザのみシェルスクリプトの実行を許可する場合
if [ "$(id -u)" -eq 0 ]; then
    echo "一般ユーザではありません"
    exit 1
fi
</syntaxhighlight>
<br>
<br><br>
<br><br>


228行目: 300行目:
  </syntaxhighlight>
  </syntaxhighlight>
<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__
[[カテゴリ:シェルスクリプト]]
[[カテゴリ:シェルスクリプト]]