Upstartを使用していくつかのユーザープロセスを監視するスクリプトを作成していますが、私が働いている会社のためであるため、普遍的に使用する必要があります...どうですか?監視されるプロセスの数は番号と名前のように異なる可能性があるため、ユーザーが「n」個のプロセスを入力し、シェルにパス名を指定して変数に保存して渡すことができるように作成する必要があります。これを含むスクリプトを起動すると、私の質問は次のようになります。必要なだけ多くの変数をどのように作成できますか?
これはこれまで私のスクリプトです...
./script input
#!/bin/bash
FILENAME=$1
i=1
while read LINE
do
[rutaServ$i]=$LINE
echo "ruta -> [rutaServ$i]"
i=`expr $i + 1`
done < $FILENAME
ご覧のとおり、/home/user
行のみを含むプレーンテキストファイルから一時的にパス名を取得しますが、このスクリプトを実行すると次のエラーが発生します。[rutaServ1]=/home/user: The file or directory doesn't exists
これを行う正しい方法は何ですか?
答え1
配列構文に問題があるようです。また、インデックス変数は必要ありません。+=
演算子を使用して配列に追加できます。
#!/bin/bash
FILENAME=$1
rutaServ=()
while read LINE
do
rutaserv+=($LINE)
echo "ruta -> $LINE"
done < "$FILENAME"
bash
v4には、ファイルの内容を一度に配列として読み取ることができる新しいコマンドmapfile
(または)があります。readarray
mapfile rutaServ < "$FILENAME"
配列の値にアクセスするには:
for x in "${rutaserv[@]}"; do
echo "$x"
done
答え2
スクリプトをこのように呼び出すことはできますかscript.sh process1 process2
?その後、次の方法でパラメータを参照できます$@
。
# set process1 process2 # set arguments for testing
for x in "$@"; do
echo "ruta -> $x"
done
[rutaServ$i]=$LINE
rutaServ[$i]=$LINE
またはでなければなりませんrutaServ+=("$LINE")
。