シェルプロセス制御
およびJava、PHPと他の言語が同じではない、shのフロー制御は、例えば、空ではない(以下は、PHPのプロセス制御の書き込みです):
<?php if (isset($_GET["q"])) { search(q); } else { // 不做任何事情 }
他の分岐は、この他には書いていない場合のsh / bashで書面でそうではないかもしれないが、何の文は実行されません。
それ以外の場合
もし
文の構文の場合:
if condition then command1 command2 ... commandN fi
(端末コマンドプロンプトの)単一の行:
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
スペルは、後に同様の遭遇する場合Fi接続の終了が逆転されます。
それ以外の場合
他の構文の場合:
if condition then command1 command2 ... commandN else command fi
他に-場合、他の場合
他に-場合であれば、他の構文は次のとおりです。
if condition1 then command1 elif condition2 then command2 else commandN fi
以下の実施例は、2つの変数が等しいかどうかを決定します。
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
else文は、多くの場合、テストコマンドと組み合わせて使用している場合は、次のように:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
出力:
两个数字相等!
forループ
他のプログラミング言語と同様に、ループのシェルをサポート。
ループのための一般的なフォーマット:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
単一の行:
for var in item1 item2 ... itemN; do command1; command2… done;
ときに、リスト内の変数の値は、一度すべてのコマンドを実行するループのために、変数名は現在の値のリストを取得します。 コマンドは、任意の有効なシェルコマンドとステートメントすることができます。 リスト内の置換文字列とファイル名を含むことができます。
あなたは場所、コマンドラインパラメータをリサイクルするために、それを使用しない場合は、リストで、オプションです。
例えば、数字の出力電流リストの順番:
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
順次文字列を出力します。
for str in 'This is a string' do echo $str done
出力:
This is a string
while文
ループは、連続的に一連のコマンドを実行するが、入力ファイルからデータを読み取るために使用され、コマンドは、通常の条件をテストします。 形式は次のとおりです。
while condition do command done
以下は、ループ試験条件ながら、基本的なものです:intは5以下である場合、条件はtrueを返します。 int型たびにゼロからのループ処理を開始し、プラス1 int型。 上記のスクリプトは数1-5を返し実行し、その後終了します。
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
スクリプトを実行し、出力:
1 2 3 4 5
使用して、1つ以上の式を実行するために使用されるバッシュましょうコマンドを使用し、変数の計算は、変数を表すために$を追加する必要はありません、特にバイヤー: bashのコマンドを聞かせて
。ループは、キーボードの情報を読み取るために使用することができました。 次の例では、入力された情報は、可変FILMたら、<Ctrl-D>エンドループに設定されています。
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的电影名: ' while read FILM do echo "是的!$FILM 是一部好电影" done
次のようなスクリプト、出力を実行します。
按下 <CTRL-D> 退出 输入你最喜欢的电影名: w3cschool本教程 是的!w3cschool本教程 是一部好电影
無限ループ
無限ループ構文:
while : do command done
または
while true do command done
または
for (( ; ; ))
untilループ
停止したときに条件が真になるまでループするまでの一連のコマンドを実行します。
ループまでと逆のアプローチにwhileループ。
通常whileループより良い循環になるまで、いくつかの点で - とのみまれに、より有用なサイクルまで。
構文まで:
until condition do command done
条件は任意のテスト条件であってもよいし、テストはサイクルの終了時に発生し、ループが少なくとも一度実行 - この点に注意してください。
ケース
シェルケースステートメントは、よりselect文です。 あなたはcase文はマッチが成功した場合、一致するコマンドを実行し、パターンの値と一致して使用することができます。 次のようにcase文の形式は次のとおりです。
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
ケースワークは、上記のように示します。 値は、各モデルは括弧を閉じなければならない単語が続かなければなりません。 値は、変数または一定にすることができます。 すべてのコマンドが;;まで実行する時に検出された値と一致したパターンを、マッチング後。
各試合の値は、パターンを検出します。 パターンマッチングしたら、もはや対応するコマンドを実行した後、パターンマッチングは他のモードに進みます。 一致パターンが存在しない場合は、値をキャプチャするために*アスタリスクを使用し、コマンドの後ろに実行します。
次のスクリプトは、各パターンマッチングで、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
ループのうち、
ブレークして続行:サイクルでは、時にはそれがループの終了条件ループの外に強制的なニーズを満たしていない、シェルは、この機能を実装するために2つのコマンドを使用しています。
breakコマンド
breakコマンドは、(ループがすべてのバックの実行を終了)すべてのループの外にできます。
次の例では、ユーザまで無限ループにスクリプトが5より大きい数に入ります。 このサイクルから抜け出すと、シェルプロンプトに戻るには、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 之间的! 游戏结束
続けます
1違いで、それだけで、現在のサイクルのうち、すべてのループの外にジャンプしない、継続して同様のコマンドコマンドを破ります。
上記の例を変更するには:
#!/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より入力番号大きく、この場合は、文のエコー「ゲームは終わった!」、サイクルを終了しませんを実行します。
ESAC
文法とケースCファミリーにおける言語の違いが大きく、それがESACがかかる(場合が順番にある)破る2つのセミコロンで表さ右括弧で、それぞれの場合のブランチ、終わりを告げます。