for条件には2つの変数を使用する必要があります。例えば、
cat days
01072017
02072017
03072017
cat hours
00:00
01:00
02:00
03:00
私のシェルスクリプトの例
for i in `cat days` & j in `cat hours`
do
cat file | grep $i $j >data-$i-$j
done
3日* 4時間= 12個のファイルの出力を希望し、対応するデータ-日-時間にリダイレクトします。
答え1
このタイプの問題に対する標準的な解決策は、2つのループを作成することです。
for i in $(<days); do
for j in $(<hours); do
grep "$i $j" file > data-"$i-$j"
done
done
コマンドを置き換えるためにバックティックを変更し、デッド$()
キャットを削除し、二重引用符を追加しました。
答え2
入れ子になった for ループを使用する必要があります。
for i in `cat days`
do
for j in `cat hours`
do
cat file | grep "$i $j" >data-${i}-${j}
done
done
答え3
この 1 行コマンドを使用してマルチループを実行できます。たとえば、異なるサービスパラメータを使用して別のホストでサービスを再起動する必要があります。 「私」ホストIDと「ジェイ」サービス名パラメータの場合
for i in 1 2 3 4;do ssh host$i 'for j in A B C D; do sudo systemctl restart service_$j; done'; done
メモ:あなたは変わらなければなりません「私」そして「ジェイ」値が要件と一致します。