.shスクリプトを使用して実行するために複数のパラメータを渡す方法

.shスクリプトを使用して実行するために複数のパラメータを渡す方法

リスト.txtファイルにはログファイルのリストが含まれています。

例えば

    server_log1
    server_log2
    ........
    server_log50

これらのログをダウンロードする別のシェルスクリプトがあります。これがうまくいく方法です。

./script.sh serverlog1

自動で作りたいです。つまり、各ログファイルの名前を自動的に渡すことができます。リスト.txt処刑された。

それは可能ですか?頑張った

#!/bin/bash
for i in `cat /home/ec2-user/list.txt` ; do
sh ./workaround.sh $i
done

しかし成功はありません。

ベストアンサー1

パラメータを読み取る最も簡単な方法は次のとおりです。

各パラメータは、$IFS現在定義されているORによって参照され検証されますinternal file separator。デフォルトの文字は空白です。

たとえば、次のように見てください。# ./script.sh arg1 arg2

この例の引数のリストはarg1 = $1andでありarg2 = $2、これで書き換えることができますarg1 arg2 = $@

もう一つの注意はログリストの使用です。このリストはどのくらいの頻度で変更されますか?私の家は毎日です。繰り返しループの配列としてディレクトリ出力を使用しないのはなぜですか?例えば。

for i in $(ls /path/to/logs); do
  ./workaround.sh $i;
done

あるいは、より良い方法は、functions混乱を取り除くためにbashで使い続けることです。

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スクリプトのデバッグにも役立ちます。

ログのみを送信する場合は、スクリプトを完全に削除してくださいrsyncrsyslogsyslog

おすすめ記事