English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java、PHPなどの言語とは異なり、shのプログラム制御は空にできません。以下はPHPのプログラム制御の書き方です:
<?php if (isset($_GET["q"])) { search(q); } else { // 何もしない }
sh/bashではこのように書かないでください、else 分岐に何も実行されない場合、この else を書かないでください。
if 文法形式:
if condition then command1 command2 ... commandN fi
一行に書く(ターミナルのコマンドプロンプトに適用):
if [ $(ps -ef | grep -c \ -gt 1 ]; then echo "true"; fi
末尾の fi は if を逆に書いたもので、後にも出てきます。
if else 文法形式:
if condition then command1 command2 ... commandN else command fi
if else-if else 文法形式:
if condition1 then command1 elif condition2 then command2 else commandN fi
以下の例では、二つの変数が等しいかどうかを判断する方法を示します:
a=10 b=20 if [$a == $b ] then echo "a は b と等しい" elif [$a -gt $b ] then echo "a は b より大きい" elif [$a -lt $b ] then echo "a は b より小さい" else echo "条件に一致するものはありません" fi
出力結果:
a は b より小さい
if else 文言語はよく test コマンドと組み合わせて使用されます。以下のようになります:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '二つの数字が等しい!' else echo '二つの数字が等しい!' fi
出力結果:
二つの数字が等しい!
他のプログラミング言語と同様に、Shellはforループをサポートしています。
forループの一般的な形式は:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
一行に書くと:
for var in item1 item2 ... itemN; do command1; command2... done;
変数の値がリストにある場合、forループはリストの現在の取得値を使用して全ての命令を実行します。コマンドは任何の有効なshellコマンドと文です。リストには置換、文字列、ファイル名を含むことができます。
リストはオプションです。リストを使用しない場合、forループはコマンドラインの位置引数を使用します。
例えば、現在のリストの数字を順序で出力します:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
出力結果:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
文字列の文字を順序で出力します:
#!/bin/bash for str in This is a string do echo $str done
出力結果:
This is a string
whileループは一連の命令を繰り返し実行するために使用され、入力ファイルからデータを読み取るためにも使用されます。その语法形式は:
while condition do command done
以下は基本的なwhileループです。テスト条件は:intが 5、その場合条件が真になります。intは 1 最初から、intが加 1。上記のスクリプトを実行すると、数字が返されます 1 まで 5、それで終了します。
#!/bin/bash int=1 while(( $int<=5 )) do echo $int let "int++" done
スクリプトを実行し、以下の出力:
1 2 3 4 5
上記の例では Bash let 命令を使用しています。これは一つまたは複数の式を実行し、変数の計算では変数に$を付けずに済みます。詳細は参照してください:Bash let 命令
。
whileループはキーボード情報を読み取るために使用できます。以下の例では、入力情報が変数FILMに設定され、Ctrl-D> 終了ループ。
echo 'Ctrlキーを押して-D> 終了' echo -n 'あなたが好きなウェブサイト名を入力してください: ' while read FILM do echo "はい!$FILM は良いサイトです" done
スクリプトを実行し、以下のような出力が出力されます:
Ctrlキーを押して-D> 終了 あなたが好きなウェブサイト名を入力してください:基本チュートリアルウェブ はい!基本チュートリアルウェブは良いサイトです
無限ループの语法形式:
while : do command done
または
while true do command done
または
for (( ; ; ))
until ループは条件が true になるまでコマンドを一連に実行します。
until ループと while ループは処理方法が逆です。
一般的に while ループは until ループよりも優れていますが、特定の状況では(非常に稀な場合)、until ループがより有効です。
until 文法形式:
until condition do command done
condition は一般的に条件表現であり、返り値が false ならば、ループ内の文を続行し、true ならばループを終了します。
以下の例では、until コマンドを使用して 0 ~ 9 の数字:
#!/bin/bash a=0 until [ ! $a -lt 10 ] do echo $a a=`expr $a + 1` done
実行結果:
出力結果は:
0 1 2 3 4 5 6 7 8 9
case ... esac 多選択文です。他の言語の switch ... case 文と似ており、多枝選択構造です。各 case 分枝は右括号で始まり、;; で break と表示され、実行が終了し、case ... esac 文全体から抜け出します。esac(caseの逆)が終了マークです。
case 文を使って値とパターンを一致させることができます。一致が成功すると、相匹配の命令を実行します。
case ... esac 语法形式如下:
case 値 in パターン1) command1 command2 ... commandN ;; パターン2) command1 command2 ... commandN ;; esac
case 効果は上記の通り、値の後には単語 in、各パターンは右括号で終了する必要があります。値は変数または定数で、値が特定のパターンに一致すると、その間のすべてのコマンドが実行されます。パターンが一致しない場合、星号(*)を使用し、其间所有命令开始执行直至 ;;。
値は変数または定数で、値が特定のパターンに一致すると、その間のすべてのコマンドが実行されます。パターンが一致しない場合、星号(*)を使用し、各パターンは右括号で終了する必要があります。値が特定のパターンに一致すると、そのパターンに対応するコマンドが実行され、他のパターンはスキップされます。パターンが一致しない場合、星号(*)を使用します。 * その値をキャプチャして、次のコマンドを実行します。
以下のスクリプトは入力を促す: 1 まで 4、各パターンと一致させる:
echo '入力' 1 まで 4 の間の数字: echo 'あなたが入力した数字は:' read aNum case $aNum in 1) echo 'あなたが選んだのは' 1' ;; 2) echo 'あなたが選んだのは' 2' ;; 3) echo 'あなたが選んだのは' 3' ;; 4) echo 'あなたが選んだのは' 4' ;; *) echo 'あなたは入力しない' 1 まで 4 の間の数字 ;; esac
異なる内容を入力すると、異なる結果が得られます。例えば:
入力 1 まで 4 の間の数字: あなたが入力した数字は: 3 あなたが選んだのは 3
以下のスクリプトは文字列を一致させる:
#!/bin/sh site="w3codebox" case "$site" in "w3codebox") echo "基本チュートリアルウェブ" ;; "google") echo "Google 検索" ;; "taobao") echo "淘宝网" ;; esac
出力結果は:
基础教程网
ループの過程で、ループの終了条件に達していない場合に強制的にループを退出する必要があることがあります。Shellはこの機能を実現するために二つのコマンドを使用します:breakとcontinue。
breakコマンドは、すべてのループから跳出し(後続のすべてのループの実行を終了します)。
以下の例では、スクリプトはユーザーが数字を入力するまで死循环に入ります。5。このループから退出し、shellのプロンプトに戻るには、breakコマンドを使用する必要があります。
#!/bin/bash while : do echo -n "入力 1 まで 5 の間の数字: read aNum case $aNum in 1|2|3|4|5) echo "あなたが入力した数字は $aNum!" ;; *) echo "あなたが入力した数字は 1 まで 5 の間の! ゲーム終了 break ;; esac done
上記のコードを実行すると、出力結果は:
入力 1 まで 5 の間の数字:3 あなたが入力した数字は 3! 入力 1 まで 5 の間の数字:7 あなたが入力した数字は 1 まで 5 の間の! ゲーム終了
continue コマンドは break コマンドと似ていますが、少し違いがあります。それは、すべてのループから跳出しません。ただ、現在のループから跳出します。
上記の例を変更します:
#!/bin/bash while : do echo -n "入力 1 まで 5 の間の数字: " read aNum case $aNum in 1|2|3|4|5) echo "あなたが入力した数字は $aNum!" ;; *) echo "あなたが入力した数字は 1 まで 5 の間の!" continue echo "ゲーム終了" ;; esac done
コードを実行すると、入力が5の数字の場合、この例のループは終了しません。文echo "ゲーム終了"決して実行されない。