루프 외부에서 배열을 읽는 bash 스크립트

루프 외부에서 배열을 읽는 bash 스크립트

Bash 스크립트를 작성하는 것은 이번이 처음이고 for 루프 외부의 배열을 읽을 수 없습니다.
내가 하고 싶은 것은.. /MyDir에 있는 모든 파일의 이름을 배열로 저장하는 것입니다.
해당 이름으로 실행 중인 프로세스가 있는지 확인하세요.
실행 중인 프로세스 이름과 실행되지 않는 프로세스 이름을 별도의 배열에 저장합니다.
for 루프 외부에 배열과 각 배열의 요소 개수를 인쇄합니다.
아래는 제가 작업 중인 코드입니다.
안내해주세요.

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

답변1

다음 구문을 사용하여 배열의 모든 요소를 ​​참조할 수 있습니다.

${ArrayName[subscript]}

다음 구문을 사용하면 bash 쉘 배열 길이를 쉽게 찾을 수 있습니다.

${#ArrayName[@]}

하단의 코드를 다음과 같이 변경합니다.

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

결과는 다음과 같습니다.

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

관련 정보