web-dev-qa-db-ja.com

バッシュ-前回完了後にコマンドを実行する方法は?

現在、私はscript.sh次の内容のファイル:

#!/bin/bash
wget -q http://exemple.com/page1.php;
wget -q http://exemple.com/page2.php;
wget -q http://exemple.com/page3.php;

前のコマンドが終了したら、コマンドを1つずつ実行したい。私はそれを正しい方法で行っていますか?私はこれまでLinuxを使用したことがなく、それを検索しようとしましたが、解決策は見つかりませんでした。

104
drogy

はい、あなたはそれを正しい方法で行っています。シェルスクリプトは各コマンドを順次実行し、最初のコマンドが完了するのを待ってから次のコマンドが開始します。コマンドを;で結合するか、別々の行に置くことができます。

command1; command2

または

command1
command2

コマンドが別々の行にある場合、;は必要ありません。最初のコマンドが正常に終了した場合にのみ、2番目のコマンドの実行を選択することもできます。これを行うには、&&を使用して参加します。

command1 && command2

または

command1 &&
command2

利用可能なさまざまな制御演算子の詳細については、「 ここ 」を参照してください。

151
terdon

このような反復的なケースでは、for loopを使用することをお勧めしました。

for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done

これはコマンドラインに適した1行のバージョンですが、スクリプトで使用することもできます。変数を空白なしで文字列に埋め込む場合は、変数名を中括弧で囲む必要があります。

ループは要求を順番に送信するだけでなく、タイプミスを気にすることなく、必要に応じて調整して再利用するのが簡単です。

13
Rache