Независимо от того, какой это компьютерный язык, зацикливание — неизбежная тема, и 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, чтобы завершить скрипт.
Это все настоящая любовь после прочтения. Поставить большой палец вверх и уйти? Ваши «Три звена» — самая большая мотивация для Лян Сюй продолжать творить!
- Сфокусируйся наоригинальныйНет публики"Хороший линукс», получите последнюю галантерею Linux в первый раз!
- Ответьте на фон официальной учетной записи [информация] [интервью] [резюме], чтобы получить интервью, самосовершенствование, резюме и другую информацию о выбранных производителях первого уровня.
- Следите за моим блогом:lxlinux.net