シェルスクリプトで必要な数の変数を生成するには?

シェルスクリプトで必要な数の変数を生成するには?

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"

bashv4には、ファイルの内容を一度に配列として読み取ることができる新しいコマンドmapfile(または)があります。readarray

mapfile rutaServ < "$FILENAME"

配列の値にアクセスするには:

for x in "${rutaserv[@]}"; do
    echo "$x"
done

おすすめ記事