Este es mi primer intento de escribir un script bash y no puedo leer la matriz fuera del bucle for.
Lo que estoy tratando de hacer es... almacenar el nombre de todos los archivos de /MyDir en una matriz.
Compruebe si hay un proceso ejecutándose con ese nombre.
Almacene el nombre del proceso que se ejecuta y no se ejecuta en diferentes matrices.
Imprima tanto las matrices como el recuento de elementos en cada matriz, fuera del bucle.
A continuación se muestra el código en el que estoy trabajando.
Por favor guía.
#!/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[@]}"
Respuesta1
Se puede hacer referencia a cualquier elemento de una matriz utilizando la siguiente sintaxis:
${ArrayName[subscript]}
Puede averiguar fácilmente la longitud de la matriz de shell bash utilizando la siguiente sintaxis:
${#ArrayName[@]}
Cambie su código en la parte inferior a lo siguiente:
echo "${#live[@]} Processes are running."
echo "List of Processes live ${live[@]}"
echo "${#dead[@]} Processes are dead."
echo "List of Processes dead ${dead[@]}"
Y obtener un resultado como este:
~$ 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