Это моя первая попытка написать скрипт 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