bash script ler array fora do loop

1

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

#!/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[@]}"
    
por sap 20.05.2016 / 12:52

1 resposta

2

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

${ArrayName[subscript]}

Você pode descobrir facilmente o tamanho 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 
    
por 20.05.2016 / 13:07

Tags