script bash lê array fora do loop

script bash lê array fora do loop

Esta é minha primeira tentativa de escrever um script bash e não consigo ler o array fora do loop for.
O que estou tentando fazer é armazenar o nome de todos os arquivos de/MyDir em uma matriz.
Verifique se existe um processo em execução com esse nome.
Armazene o nome do processo em execução e não em matrizes diferentes.
Imprima as matrizes e a contagem de elementos em cada matriz, fora do loop for.
Abaixo está o código no qual estou trabalhando.
Por favor, oriente.

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

Responder1

Qualquer elemento de um array pode ser referenciado usando a seguinte sintaxe:

${ArrayName[subscript]}

Você pode descobrir facilmente o comprimento da matriz do shell bash usando a seguinte sintaxe:

${#ArrayName[@]}

Altere seu código na parte inferior para o seguinte:

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

E obtenha um 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 

informação relacionada