GNU/Linux >> Linux の 問題 >  >> Linux

.sh スクリプトで実行する複数の引数を渡す方法

引数を読み取る最も簡単な方法は、次のように記述できます。

各引数は $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 内の各ログ ファイル名で実行される " の意味に応じて、必要に応じて適応できる構造ができました。" :)


Linux
  1. 複数のファイルの拡張子を変更するにはどうすればよいですか?

  2. コマンドライン引数をBashスクリプトに渡しますか?

  3. シェルスクリプトでスイッチを処理する方法は?

  1. 末尾にスラッシュが付いたディレクトリをリストするためにLsを取得するにはどうすればよいですか?

  2. DNSSECでドメインを一覧表示する方法

  3. カラー出力をgrepする方法

  1. パラメータをエイリアスに渡す方法は?

  2. Linuxでコマンドの途中でxargsを使用してすべての引数を渡すにはどうすればよいですか

  3. root を持つすべてのユーザーを一覧表示するにはどうすればよいですか?