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 

관련 정보