Bash-Skript liest Array außerhalb einer Schleife

Bash-Skript liest Array außerhalb einer Schleife

Dies ist mein erster Versuch, ein Bash-Skript zu schreiben, und ich kann kein Array außerhalb der For-Schleife lesen.
Ich versuche, die Namen aller Dateien aus /MyDir in einem Array zu speichern.
Überprüfen Sie, ob ein Prozess mit diesem Namen ausgeführt wird.
Speichern Sie die Namen von laufenden und nicht laufenden Prozessen in unterschiedlichen Arrays.
Drucken Sie sowohl die Arrays als auch die Anzahl der Elemente in jedem Array außerhalb der For-Schleife.
Unten ist der Code, an dem ich arbeite.
Bitte führen Sie mich.

#!/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[@]}"

Antwort1

Auf jedes Element eines Arrays kann mit der folgenden Syntax verwiesen werden:

${ArrayName[subscript]}

Sie können die Array-Länge in der Bash-Shell ganz einfach mit der folgenden Syntax ermitteln:

${#ArrayName[@]}

Ändern Sie Ihren Code unten wie folgt:

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

Und erhalten Sie ein Ergebnis wie dieses:

~$ 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 

verwandte Informationen