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