Некоторое резюме сценариев оболочки о циклах

Linux

Независимо от того, какой это компьютерный язык, зацикливание — неизбежная тема, и Shell, безусловно, не исключение. Ниже приведены некоторые общеизвестные моменты, связанные с циклами в сценариях оболочки, и новички могут обращаться к ним.

для петли

Самый простой цикл в сценариях оболочки:forДля циклов друзьям с основами программирования следовало бы использовать циклы for. Самый простой цикл for выглядит так, вы просто записываете значения переменных последовательно после in :

#!/bin/bash

for num in 1 2 3 4
do
    echo $num
done

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

#!/bin/bash

for x in {a..z}
do
    echo $x
done

пока цикл

В дополнение к циклу for оболочка также предоставляетwhileцикл. В других языках, если вы видели цикл for, но не цикл while, вы, должно быть, выучили поддельный язык.

В цикле while при каждом выполнении цикла условие будет оцениваться один раз, чтобы определить, должен ли цикл продолжаться. На самом деле, когда число циклов относительно невелико, эффект цикла for аналогичен эффекту цикла while, но если число циклов относительно велико, например, 100 000 раз, то преимущества цикла while становятся очевидными. отражение.

#!/bin/bash

n=1

while [ $n -le 4 ]
do
    echo $n
    ((n++))
done

петля установить петлю

Как и в других языках высокого уровня, циклы могут быть вложены друг в друга. Например, в следующем примере мы вставляем цикл for внутрь цикла while:

#!/bin/bash

n=1

while [ $n -lt 6 ]
do
    for l in {a..d}
    do
        echo $n$l
    done
    ((n++))
done

Результат выполнения этого скрипта должен быть 1a, 1b, 1c, 1d, 2a, 2b... 5d.

Содержимое цикла меняется

В упомянутом выше цикле for значения, которые должны быть присвоены переменным цикла, перечислены в списке после in. Но это слишком негибко, потому что во многих случаях значение, которое должна получить переменная цикла, не является фиксированным.

Например, есть переменная для получения всех пользователей в текущей системе, но поскольку каждый пользователь компьютера индивидуален, мы просто не можем записать эту переменную до смерти.

В этом случае мы можем использовать команду ls, чтобы вывести список всех пользователей в каталоге /home, а затем использовать переменную цикла, чтобы получить их последовательно. Полный код выглядит следующим образом:

#!/bin/bash

for user in `ls /home`
do
    echo $user
done

Конечно, помимо ls оболочка поддерживает и другие команды. Например, мы можем использовать команду date, чтобы получить текущее системное время, а затем вывести их последовательно:

$ for word in `date`
> do
>     echo $word
> done
Thu
Apr
9
08:12:09
CST
2020

проверка значения переменной

Когда мы используем цикл while, нам часто нужно определить, больше или меньше значение переменной определенного числа. Иногда это число также представлено другой переменной, поэтому нам нужно определить, является ли значение этой переменной числом. Существует три метода суждения:

#!/bin/bash

echo -n "How many times should I say hello? "
read ans

if [ "$ans" -eq "$ans" ]; then
    echo ok1
fi

if [[ $ans = *[[:digit:]]* ]]; then
    echo ok2
fi

if [[ "$ans" =~ ^[0-9]+$ ]]; then
    echo ok3
fi

Первый способ может показаться ерундой, но на самом деле,-eqЕго можно использовать только для оценки между значениями.Если это строка, оценка не будет принята, поэтому это гарантирует, что an является числовой переменной.

Второй метод заключается в прямом использовании подстановочных знаков Shell для оценки переменных.

Третий метод более прямой, он использует регулярные выражения для оценки переменных.

Перейдем сразу к примеру:

#!/bin/bash

echo -n "How many times should I say hello? "
read ans

if [ "$ans" -eq "$ans" ]; then
  n=1
  while [ $n -le $ans ]
  do
    echo hello
    ((n++))
  done
fi

В этом скрипте я передаю количество циклов в переменную ans, а затем скрипт несколько раз печатает приветствие. Чтобы гарантировать, что то, что мы передаем, является числом, мы используемif [ "$ans" -eq "$ans" ]приговор судить. Если мы передаем что-то отличное от числа, оно не войдет в цикл while.

2020 Избранные компании первого уровня, такие как Ali / Tencent Интервью, резюме, расширенные возможности, электронная книга Публичный аккаунт »Хороший линукс"Фоновый ответ"материал" бесплатно

содержимое выходного текстового файла цикла

Если вы хотите просмотреть содержимое текстового файла построчно, вы можете сделать это:

#!/bin/bash

echo -n "File> "
read file
n=0

while read line; do
  ((n++))
  echo "$n: $line"
done < $file

Здесь мы используем команду чтения, чтобы прочитать содержимое текстового файла в файловую переменную, а затем используем перенаправление (последняя строка вышеприведенного скрипта), чтобы передать содержимое файла в цикл while для обработки, а затем распечатать их. вне.

бесконечная петля

Иногда нам нужно сделать что-то в цикле навсегда, тогда мы можем использовать бесконечный цикл. Достичь этого легко, просто используйтеwhile trueВот и все.

#!/bin/bash

while true
do
    echo -n "Still running at "
    date
    sleep 1
done

В приведенном выше сценарии он будет печатать каждую 1 секунду.Still running at 具体时间, пока вы не нажмете Ctrl + C, чтобы завершить скрипт.

Это все настоящая любовь после прочтения. Поставить большой палец вверх и уйти? Ваши «Три звена» — самая большая мотивация для Лян Сюй продолжать творить!

  1. Сфокусируйся наоригинальныйНет публики"Хороший линукс», получите последнюю галантерею Linux в первый раз!
  2. Ответьте на фон официальной учетной записи [информация] [интервью] [резюме], чтобы получить интервью, самосовершенствование, резюме и другую информацию о выбранных производителях первого уровня.
  3. Следите за моим блогом:lxlinux.net