私は初めてbashスクリプトに触れました。複数のコンピュータにpingを送信するスクリプトがあります。 「I」は次のように書きました。
for var in "$@"
do
ping -c 1 -W 2 "$var" > /dev/null
echo $var = $?
done
私がしたいのは、同じ名前の複数のコンピュータをpingするための入力として単一のグローブを許可することです。
例:pingall machine[:01-06:]
しかし、これを実装する方法がわかりません。
答え1
ワイルドカード別の名前ですファイル名の生成またはパス名拡張。
これはシェルワイルドカードを一致するファイルのリストに変換するプロセスです。それは単に使用することができます既存の文書。
ここでは代わりに中かっこ拡張を使用できます。
pingall machine{01..06}
シェルは、その名前のファイルが現在のディレクトリにあるかどうかにかかわらず(ワイルドカードではない)、単一の引数に拡張されますmachine01
。machine02
machine06
この構文はzsh
最新バージョンの 。bash
yash -o braceexpand
を使用するには、ksh93
次のものを使用できます。
pingall machine{1..6%02d}
この特別なケースでは、次のものを使用することもできます。
pingall machine0{1..6}
GNUseq
コマンドを使用すると、次のこともできます(デフォルトはと仮定します$IFS
)。
pingall $(seq -f machine%02.0f 6)
答え2
パターンは、ファイル名と一致する場合にのみ拡張されます。代わりに中かっこ拡張を使用できますか?スクリプトの実行
pingall machine0{1..6}
これは次のように拡張されます。
pingall machine01 machine02 machine03 machine04 machine05 machine06