Я очень новичок в написании сценариев оболочки, и я столкнулся с проблемой, которая весьма запутана.Программа довольно проста, поэтому я просто выкладываю ее здесь:
#!/bin/bash
list=""
list=`mtx -f /dev/sg2 status | while read status
do
result=$(echo ${status} | grep "Full")
if [ -z "$result" ]; then
continue
else
echo $(echo ${result} | cut -f3 -d' ' | tr -d [:alpha:] | tr -d [:punct:])
fi
done`
echo ${list}
for haha in ${list}
do
printf "current slot is:%s \n" ${haha}
done
Программа выполняет то, что выполняет mtx -f /dev/sg2 status
и переходит к каждой строке и проверяет, заполнен ли диск.Если в этой строке указано «Full», я запишу номер слота в этой строке и добавлю list
.
Обратите внимание, что я ставлю обратную кавычку после list=
в строке 6,и после этого он охватывает весь цикл while.Причина неясна для меня, но я получил это использование, просто прибегая к помощи.Говорят, что цикл while откроет отдельную оболочку или что-то в этом роде, поэтому, когда цикл while будет выполнен, все, что вы объедините в цикле, будет потеряно, поэтому в моей первоначальной реализации list
все еще пусто послецикл while.
Мой вопрос таков: даже если приведенный выше код работает нормально, он выглядит довольно хитрым для других, и, что еще хуже, я могу сделать только ОДИН list
после завершения цикла.Есть ли лучший способ исправить это, чтобы я мог извлечь больше информации из цикла?Например, если мне нужно list2
для хранения других значений?Спасибо.