前回のLinuxシェルスクリプトの基礎学習の記事では、Linuxシェルスクリプトの制御処理のif、select、caseについてお話しましたが、ここではLinuxシェルスクリプトの制御処理のループと引用符について紹介します。 . 制御プロセスにはさらに多くの内容があり、一部もあります。 内容はここのドキュメントに関するものです。
4.loop
ループ式:
while ...; do .... done
while-loopは式のテストがtrueになるまで実行されます。テストする式が true である間実行されます。
キーワード「break」はループを抜け出すために使用されます。キーワード「Continue」は、残りの部分を実行せずに次のループに直接ジャンプするために使用されます。
for ループ式は文字列のリスト (スペースで区切られた文字列) を調べ、それを変数に割り当てます:
for var in ....; do .... done
次の例では、ABC がそれぞれ画面に表示されます:
#!/bin/sh for var in A B C ; do echo "var is $var" done
ここに A がありますさらに便利なスクリプトは showrpm です。その機能は、RPM パッケージの統計情報を出力することです:
#!/bin/sh # list a content summary of a number of RPM packages # USAGE: showrpm rpmfile1 rpmfile2 ... # EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm for rpmpackage in $*; do if [ -r "$rpmpackage" ];then echo "=============== $rpmpackage ==============" rpm -qi -p $rpmpackage else echo "ERROR: cannot read file $rpmpackage" fi done
2 番目の特殊変数 $* がここに表示されます。これには、入力されたすべてのコマンド ライン パラメーターの値が含まれます。
showrpm openssh.rpm w3m.rpm webgrep.rpm を実行すると、$* には openssh.rpm、w3m.rpm、webgrep.rpm の 3 つの文字列が含まれます。
5. プログラムにパラメータを渡すときの引用符
、プログラムはワイルドカードと変数を拡張しました。ここでのいわゆる展開とは、プログラムがワイルドカード文字 (* など) を適切なファイル名に置き換え、変数を変数値に置き換えることを意味します。プログラムがこの置換を行わないようにするには、引用符を使用します。 現在のディレクトリにいくつかのファイル、つまり 2 つの jpg ファイル、mail.jpg と tux.jpg があると仮定して、例を見てみましょう。
1.2 SHELL スクリプト
#ch#!/bin/sh mod +x filename
cho *.jpg ∪ ゆっくり 螅谛果暙耄?./filename をコンパイルしてスクリプトを実行します。
これにより、「mail.jpg tux.jpg」の結果が出力されます。
引用符 (単一および二重) は、このワイルドカード展開を防ぎます:
#!/bin/sh echo "*.jpg" echo '*.jpg'これは、「*.jpg」を 2 回出力します。
一重引用符はより厳密です。これにより、変数の展開が防止されます。二重引用符はワイルドカードの展開を防ぎますが、変数の展開は可能です。
#!/bin/sh echo $SHELL echo "$SHELL" echo '$SHELL'実行結果は次のとおりです:
/bin/bash /bin/bash $SHELL最後に、この展開を防ぐ別の方法があります。それはエスケープ文字であるバックスラッシュバーを使用することです:
echo *.jpg echo $SHELLこれは出力します:
*.jpg $SHELLLinuxシェルスクリプトの基本についてはこれで終わりです。ここのドキュメントには制御プロセスの内容がまだ少し残っていますが、これについては次回分析します。