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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == ここでは、シェルスクリプトにおける条件分岐の記述方法を記載する。<br> <br> * if文 *: if文を使用することで条件式…」)
 
17行目: 17行目:
     echo 'NUM1 equal NUM2'
     echo 'NUM1 equal NUM2'
  fi
  fi
</source>
<br>
* case文
*: case文は判定対象となる値と事前に作成した複数の条件を上から順に比較して、マッチした条件の処理を実行させることができる。
*: どの条件にもマッチしない場合は何も処理を行わない。
<source lang="sh">
case 値 in
    条件1)
      処理1
      ;;
    条件2)
      処理2
      ;;
    *)        # <---条件1と条件2に当てはまらない場合に選択される
      処理3
      ;;
esac
  </source>
  </source>
<br><br>
<br><br>

2020年2月13日 (木) 21:25時点における版

概要

ここでは、シェルスクリプトにおける条件分岐の記述方法を記載する。

  • if文
    if文を使用することで条件式の結果によって、真偽の分岐を行い、決められた処理を実行することができる。
    条件式には、testコマンド([]でも代用可能)を使用することが多いが、その他のコマンドを使用することも可能である。

    以下は、testコマンドと[]を使用した記述例である。
 # testコマンドを使用
 if test $NUM1 -eq $NUM2 ; then
    echo 'NUM1 equal NUM2'
 fi
 
 # []を使用([の直後と]の直前には半角スペースが必要なので忘れないように注意すること)
 if [ $NUM1 -eq $NUM2 ]; then
    echo 'NUM1 equal NUM2'
 fi


  • case文
    case文は判定対象となる値と事前に作成した複数の条件を上から順に比較して、マッチした条件の処理を実行させることができる。
    どの条件にもマッチしない場合は何も処理を行わない。
 casein
    条件1)
       処理1
       ;;
    条件2)
       処理2
       ;;
    *)         # <---条件1と条件2に当てはまらない場合に選択される
       処理3
       ;;
 esac



if文

条件分岐 if then fi

この条件分岐は、条件式が真の場合のみ指定された処理を行い、それ以外の場合は何も行わない。
ここでは、NUM1とNUM2の値を比較して、等しい場合にメッセージを表示するというスクリプトを記述する。

 #!/bin/bash
 NUM1=10
 NUM2=10
 
 if [ $NUM1 -eq $NUM2 ]; then
    echo 'NUM1 equal NUM2'
 fi


条件分岐 if then else fi

この条件分岐は、条件式が真の場合に処理1を行い、それ以外の場合は処理2を行う。
ここでは、NUM1とNUM2の内容の真偽を判別し、同じ場合と異なる場合によって表示させるメッセージを変更するというスクリプトを記述する。

 #!/bin/bash
 NUM1=10
 NUM2=10
 
 if [ $NUM1 -eq $NUM2 ]; then
    echo 'NUM1 equal  NUM2'
 else
    echo 'NUM1 not equal NUM2'
 fi


条件分岐 if then elif then else fi

この条件分岐は、条件式1が真の場合は処理1を行い、条件式1が偽で条件式2が真の場合は処理2を行い、それ以外の場合は処理3を行う。
ここでは、NUM1とNUM2の値を比較して、内容が等しい、NUM1の方が大きいか小さいかによって表示するメッセージを変えるというスクリプトを記述する。

 #!/bin/bash
 NUM1=20
 NUM2=10
 
 if [ $NUM1 -eq $NUM2 ]; then
    echo 'NUM1 equal  NUM2'
 elif [ $NUM1 -gt $NUM2 ]; then
    echo 'NUM1 greater than  NUM2'
 else
    echo 'NUM1 smaller than NUM2'
 fi


testコマンドの比較条件

testコマンドは、条件式の真偽を判別して、その結果を返すコマンドである。
使用できる比較条件は数多くあるが、使用頻度の高いものを抜粋して記載する。

数値の比較条件

条件 比較内容
数値1 -eq 数値2 数値1と2が等しい場合に真
数値1 -ne 数値2 数値1と2が等しくない場合に真
数値1 -gt 数値2 数値1が数値2より大きい場合に真
数値1 -ge 数値2 数値1が数値2以上ならば真
数値1 -lt 数値2 数値1が数値2より小さい場合に真
数値1 -le 数値2 数値1が数値2以下の場合に真


文字の比較条件

条件 比較内容
-n 文字列 文字列の長さが0より大きい場合は真
-z 文字列 文字列の長さが0ならば真
文字列1 = 文字列2 文字列1と2が等しい場合は真
文字列1 != 文字列2 文字列1と2が異なる場合は真


ファイルの比較条件

条件 比較内容
ファイル1 -nt ファイル2 ファイル1がファイル2より新しく作成・更新されていた場合は真
ファイル1 -ot ファイル2 ファイル1がファイル2より古く作成・更新されていた場合は真
-d ファイル ファイルが存在してディレクトリであれば真
-e ファイル ファイルが存在していれば真
-r ファイル ファイルが存在して読み込み許可されていれば真
-w ファイル ファイルが存在して書き込み許可されていれば真
-x ファイル ファイルが存在して実行可能であれば真


ANDとORとNOT

条件 比較内容
! 条件式 条件式が偽なら真(NOT)
条件式1 -a 条件式2 条件式1と2のどちらも真なら真(AND)
条件式1 -o 条件式2 条件式1か2のどちらかが真なら真(OR)