引数を読み取る最も簡単な方法は、次のように記述できます。
各引数は $IFS
によって参照および解析されます または現在定義されている internal file separator
.デフォルトの文字はスペースです。
たとえば、次のようになります。 # ./script.sh arg1 arg2
その例の引数リストは arg1 = $1
です と arg2 = $2
arg1 arg2 = [email protected]
と書き換えることができます .
もう 1 つの注意点は、ログのリストの使用です。それはどのくらいの頻度で変更されますか?私の仮定は毎日です。ディレクトリ出力を反復ループの配列として使用しないのはなぜですか?例えば;
for i in $(ls /path/to/logs); do
./workaround.sh $i;
done
または、さらに良いことに、functions
の使用に進みます
function process_file()
{
# transfer file code/command
}
function iterate_dir()
{
local -a dir=($(ls $1))
for file in ${dir[@]}; do
process_file $file
done
}
iterate_dir /path/to/log/for
これらは、シェル スクリプトの知識を向上させるための提案にすぎませんが、発生しているエラーがあるかどうかを知る必要があり、各スクリプト コードや機能の詳細も知っておく必要があります。 -x
を利用する 引数はスクリプトのデバッグにも役立ちます。
単純にログを転送するだけの場合は、スクリプトをすべて削除して rsync
を使用することをお勧めします。 、 rsyslog
または syslog
それらはすべて、問題のタスクにより適しているためです。
xargs -n 1 ./script.sh <list.txt
この例では、xargs
./script.sh
を実行します 標準入力から読み込まれた単一の引数で複数回。
標準入力はファイル list.txt
から取得されます 単純なシェル入力リダイレクトを介して。これは list.txt
ファイルには、スクリプトで使用する引数が 1 行に 1 つずつ含まれています。
./script.sh
スクリプトは list.txt
の各行に対して 1 回実行されます ファイル。
-n
について xargs
へのフラグ
-n number
ユーティリティを呼び出す number
まで、できるだけ多くの標準入力引数を使用する (正の 10 進整数) 引数最大。
別の解決策は、スクリプトが list.txt
から直接読み取れるようにすることです。 、または複数のコマンドライン引数を取る (list.txt
からのエントリ) )、および 1 つまたは複数のバッチでファイルをダウンロードします。しかし、スクリプトの仕組みがわからないので、これを行う方法について詳しく説明することはできません.
スクリプト内:while read ; do ......... ; done < filename
のような読み取りループが必要です 行を $REPLY 変数として扱う...
例えば
while read
do
mv $REPLY $REPLY.old
done < liste.txt
liste.txt 内のファイル名を filename.old に変更します
list.txt 内の各ログ ファイル名で実行される " の意味に応じて、必要に応じて適応できる構造ができました。" :)