ループ外から配列を読み取るbashスクリプト

ループ外から配列を読み取るbashスクリプト

Bashスクリプトを書くのは今回が初めてで、forループの外側の配列を読み取ることはできません。
私がやりたいことは.. / MyDirのすべてのファイルの名前を配列として保存することです。
その名前で実行中のプロセスがあることを確認してください。
実行中のプロセス名と実行されていないプロセス名を別々の配列に保存します。
forループの外側に配列と各配列の要素数を印刷します。
以下は私が作業しているコードです。
ご案内ください。

#!/bin/bash
declare -a dead
declare -a live
cd /usr/local/MyDir/
FILES=*
for f in $FILES
do
  ps -ef | grep $f > /dev/null
  if [ $? -eq 0 ];
then
    live+=( "$f" )
    echo "Process $f is running."
else
   dead+=("$f")
   echo "Process $f is not running."
fi
done

echo "${[#@live]} Processes are running."
echo  "List of Processes live ${live[@]}"
echo "${[#@dead]} Processes are dead."
echo "List of Processes dead ${dead[@]}"

答え1

次の構文を使用して、配列内のすべての要素を参照できます。

${ArrayName[subscript]}

次の構文を使用すると、bashシェル配列の長さを簡単に見つけることができます。

${#ArrayName[@]}

下部のコードを次のように変更します。

echo "${#live[@]} Processes are running."
echo  "List of Processes live ${live[@]}"
echo "${#dead[@]} Processes are dead."
echo "List of Processes dead ${dead[@]}"

結果は次のとおりです。

~$ bash 2.sh
Process bin is running.
Process games is running.
Process include is running.
Process lib is running.
Process local is running.
Process locale is running.
Process sbin is running.
Process share is running.
Process src is running.
9 Processes are running.
List of Processes live bin games include lib local locale sbin share src
0 Processes are dead.
List of Processes dead 

関連情報