MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
シェルスクリプトの基礎 - 条件分岐のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
シェルスクリプトの基礎 - 条件分岐
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == ここでは、シェルスクリプトにおける条件分岐の記述方法を記載する。<br> <br> * if文 *: if文を使用することで条件式の結果によって、真偽の分岐を行い、決められた処理を実行することができる。 *: 条件式には、testコマンド([]でも代用可能)を使用することが多いが、その他のコマンドを使用することも可能である。 *: <br> *: 以下は、testコマンドと[]を使用した記述例である。 <syntaxhighlight lang="sh"> # testコマンドを使用 if test $NUM1 -eq $NUM2 ; then echo 'NUM1 equal NUM2' fi # []を使用([の直後と]の直前には半角スペースが必要なので忘れないように注意すること) if [ $NUM1 -eq $NUM2 ]; then echo 'NUM1 equal NUM2' fi </syntaxhighlight> <br> * case文 *: case文は判定対象となる値と事前に作成した複数の条件を上から順に比較して、マッチした条件の処理を実行させることができる。 *: どの条件にもマッチしない場合は何も処理を行わない。 <syntaxhighlight lang="sh"> case 値 in 条件1) 処理1 ;; 条件2) 処理2 ;; *) # <---条件1と条件2に当てはまらない場合に選択される 処理3 ;; esac </syntaxhighlight> <br><br> == if文 == ==== 条件分岐 if then fi ==== この条件分岐は、条件式が真の場合のみ指定された処理を行い、それ以外の場合は何も行わない。<br> ここでは、NUM1とNUM2の値を比較して、等しい場合にメッセージを表示するというスクリプトを記述する。<br> <br> <syntaxhighlight lang="sh"> #!/bin/bash NUM1=10 NUM2=10 if [ $NUM1 -eq $NUM2 ]; then echo 'NUM1 equal NUM2' fi </syntaxhighlight> <br> ==== 条件分岐 if then else fi ==== この条件分岐は、条件式が真の場合に処理1を行い、それ以外の場合は処理2を行う。<br> ここでは、NUM1とNUM2の内容の真偽を判別し、同じ場合と異なる場合によって表示させるメッセージを変更するというスクリプトを記述する。<br> <syntaxhighlight lang="sh"> #!/bin/bash NUM1=10 NUM2=10 if [ $NUM1 -eq $NUM2 ]; then echo 'NUM1 equal NUM2' else echo 'NUM1 not equal NUM2' fi </syntaxhighlight> <br> ==== 条件分岐 if then elif then else fi ==== この条件分岐は、条件式1が真の場合は処理1を行い、条件式1が偽で条件式2が真の場合は処理2を行い、それ以外の場合は処理3を行う。<br> ここでは、NUM1とNUM2の値を比較して、内容が等しい、NUM1の方が大きいか小さいかによって表示するメッセージを変えるというスクリプトを記述する。<br> <syntaxhighlight lang="sh"> #!/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 </syntaxhighlight> <br> ==== 短絡演算子 ==== <code>&&</code>を短絡演算子として使用する。<br> if文の条件式が真(true)になる場合のみ簡単な処理を行うには、<code>&&</code>を使用してif文の代わりにすることができる。<br> <syntaxhighlight lang="sh"> read -p "ごみ箱を空にしますか? [y/n]" input [ "$input" = 'Y' -o "$input" = 'y' ] && rm ~/trash/* </syntaxhighlight> <br> 上記のシェルスクリプトは、以下のシェルスクリプトと同様に振るまう。<br> <syntaxhighlight lang="sh"> read -p "ごみ箱を空にしますか? [y/n]" input if [ "$input" = "Y" -o "$input" = "y" ]; then rm ~/trash/* fi </syntaxhighlight> <br> ==== testコマンドの比較条件 ==== testコマンドは、条件式の真偽を判別して、その結果を返すコマンドである。<br> 使用できる比較条件は数多くあるが、使用頻度の高いものを抜粋して記載する。<br> <br> <center> '''数値の比較条件'''<br> {| class="wikitable" |- ! 条件 !! 比較内容 |- | 数値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以下の場合に真 |} </center> <br> <center> '''文字の比較条件'''<br> {| class="wikitable" |- ! 条件 !! 比較内容 |- | -n 文字列 || 文字列の長さが0より大きい場合は真 |- | -z 文字列 || 文字列の長さが0ならば真 |- | 文字列1 = 文字列2 || 文字列1と2が等しい場合は真 |- | 文字列1 != 文字列2 || 文字列1と2が異なる場合は真 |} </center> <br> <center> '''ファイルの比較条件'''<br> {| class="wikitable" |- ! 条件 !! 比較内容 |- | ファイル1 -nt ファイル2 || ファイル1がファイル2より新しく作成・更新されていた場合は真 |- | ファイル1 -ot ファイル2 || ファイル1がファイル2より古く作成・更新されていた場合は真 |- | -a <ファイル> || <ファイル>が存在していれば真 |- | -d <ファイル> || <ファイル>が存在してディレクトリであれば真 |- | -e <ファイル> || <ファイル>が存在していれば真 |- | -f <ファイル> || <ファイル>が存在してファイルならば真 |- | -r <ファイル> || <ファイル>が存在して読み込み許可されていれば真 |- | -w <ファイル> || <ファイル>が存在して書き込み許可されていれば真 |- | -x <ファイル> || <ファイル>が存在して実行可能であれば真 |- | -L <ファイル> || <ファイル>が存在してシンボリックリンクであれば真 |- | -s <ファイル> || ファイルサイズが1以上であれば真 |} </center> <br> <center> '''ANDとORとNOT'''<br> {| class="wikitable" |- ! 条件 !! 比較内容 |- | ! 条件式 || 条件式が偽なら真(NOT) |- | 条件式1 -a 条件式2 || 条件式1と2のどちらも真なら真(AND) |- | 条件式1 -o 条件式2 || 条件式1か2のどちらかが真なら真(OR) |} </center> <br><br> == case文 == ==== 条件の指定について ==== 条件の指定にはワイルドカードを使用することができる。<br> * すべての文字列にマッチ ? 何か1文字にマッチ ??? : 何か3文字の文字列にマッチ ???* : 3文字以上の文字列にマッチ [ ] []に囲まれた文字や数字等のどれかにマッチ [! ] []囲まれていない文字や数字等のどれかにマッチするのにマッチ [ - ] 「-」で設定された範囲の文字や数字にマッチ '''注意''' OR条件を使用する場合は、条件1 | 条件2と指定することで、複数の条件をまとめて指定することができる。 *自体をマッチさせる場合は、\*、"*"、'*'とエスケープする。 ?自体をマッチさせる場合は、\?、"?"、'?'とエスケープする。 '''使用例''' abc* : abcで始まる文字列にマッチ a*bc : aで始まり、bcで終わる文字列すべてにマッチ a?c : 最初が「a」で始まり最後が「c」で終わる3文字の文字列にマッチ [ ] : []に囲まれた文字や数字等のどれかにマッチ [Aa] : Aまたはaにマッチ [Aa][Bb] : AB、Ab、aB、abにマッチ [! ] : []に囲まれていない文字や数字等のどれかにマッチ [!Aa] : 「A」と「a」以外にマッチ [a-z] : アルファベットの小文字にマッチ [A-Z] : アルファベット大文字にマッチ [a-zA-Z] : アルファベットの小文字と大文字にマッチ [0-9] : 数字の0から9にマッチ ABC | abc : 「ABC」か「abc」のどちらかにマッチ <br> ==== サンプルコード ==== 入力したキーによって、アルファベット、数字、その他の判別を行いメッセージを表示するシェルスクリプトを記述する。<br> Tを入力すると、[a-zA-Z]の条件にマッチするので、Alphabet enteredと表示される。<br> 0を入力すると、[0-9]の条件にマッチするので、Number enteredと表示される。<br> アルファベットや数字以外の文字を入力すると、*の条件にマッチするので、No alphabet or number enterdと表示される。<br> <syntaxhighlight lang="sh"> #!/bin/bash echo 'Please input alphabet or number' read key case "$key" in [a-zA-Z]) echo 'Alphabet entered' ;; [0-9]) echo 'Number entered' ;; *) echo 'No alphabet or number enterd' ;; esac </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:シェルスクリプト]]
シェルスクリプトの基礎 - 条件分岐
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse