#unix #scripting #grep #ksh
#unix #создание сценариев #grep #ksh
Вопрос:
Я пытаюсь изменить скрипт ksh, чтобы распечатать строку, содержащую фразу «/var/corefiles» . Я довольно новичок в написании сценариев, так что это сбивает меня с толку. Например, если у меня есть следующая строка в файле
/dev/x /dev/x2 /var/corefiles yes
И я использую это для цикла:
for $host in $(grep "var/corefiles" $VFSTAB_LOC); do
echo $i
done
Он выводит:
/dev/x
/dev/x2
/var/corefiles
yes
Я немного смущен тем, почему он выводит только один фрагмент за раз. Если у кого-нибудь есть какие-либо объяснения / модификации, они были бы весьма признательны!
Ответ №1:
Простое выполнение grep "var/corefiles" $VFSTAB_LOC
(без for
или echo
) сделает именно то, что, по вашим словам, вы хотите сделать.
Комментарии:
1. У меня такое ощущение, что ‘echo’ — это просто уменьшенная демонстрация того, что он действительно делает в цикле 🙂
2. Я «страдаю» от GIGO, даже не пытаясь. Я пытаюсь применить обычный искусственный (?) интеллект, хотя
3. Чувак, я тупой. Спасибо! В любом случае, echo был заполнителем для всего остального происходящего 🙂
Ответ №2:
grep "var/corefiles" $VFSTAB_LOC | while read line; do
echo "$line"
done
или в недавних версиях
readarray mylines < grep "var/corefiles" $VFSTAB_LOC
for line in "${mylines[@]}"; do
echo "$line"
done
Комментарии:
1. Полагаю, теперь я это делаю 🙂 Первый вариант действительно работает с оболочкой Korn, IIRC