Цикл с условием продолжения считал несколько строк из grep

Используйте LVM (http://tldp.org/HOWTO/LVM-HOWTO/) или:

dd if=/dev/zero of=/tmp/file_fs1 count=20 bs=1M
mke2fs -F /tmp/file_fs1
mkdir -p /dev1/folder1
mount -o loop /tmp/file_fs1 /dev1/folder1

dd if=/dev/zero of=/tmp/file_fs2 count=10 bs=1M
mke2fs -F /tmp/file_fs2
mkdir /dev1/folder1/folder1_2
mount -o loop /tmp/file_fs2 /dev1/folder1/folder1_2

df-h:

/dev/loop0             20M  173K   19M   1% /dev1/folder1
/dev/loop1            9,7M   92K  9,1M   1% /dev1/folder1/folder1_2

3
задан 11 October 2012 в 23:47
2 ответа

Зоредаш указал мне на это в чате, и poige упомянул об этом в своем ответе: эту проблему можно решить с помощью подоболочки.

Когда мне пришлось перейти с цикла for , который считывал одну переменную из моего grep за раз, на цикл while read var1 var2 , который позволил мне читать несколько переменных , Я смог привязаться к временным переменным, с которыми я работал в цикле while, используя круглые скобки для определения явной подоболочки. Вот пример:

sum=0

grep volume configfile | head -n1 | (while read var1 var2; do
  let sum=var1+var2
done

echo "The sum is $sum.")

Без круглых скобок вы всегда будете отображать сумму, равную 0. С ними вы будете отображать сумму первых двух значений в первой совпадающей строке вашего grep.

Кроме того, как указывает Пойдж в другом ответе вы можете использовать подоболочку для заполнения переменной в области видимости следующим образом:

var=$( cat file | while read a b; do
    sum=a+b
    echo "$sum"
done)

echo "$var"

В этом случае

4
ответ дан 3 December 2019 в 07:07

По крайней мере двумя способами - вернуть код ошибки и проверить его или обернуть код вспомогательной оболочки:

Res=$(cat /etc/hosts | while read h _rest; do
    [ "$h" = 'fe00::0' ] && echo 'Found'
done
)
echo $Res
-2
ответ дан 3 December 2019 в 07:07

Теги

Похожие вопросы