$ если правда; тогда эхо ДА; иначе эхо НЕТ; если ложь; тогда эхо ДА; иначе эхо НЕТ;
$ if true && true;then echo YES; else echo NO; if true && false; then echo YES; else echo NO; if false && false; then echo YES; else echo NO$ if false && true; ;тогда повторить ДА; иначе повторить НЕТ;
$ if true || true; then echo YES; else echo NO; if true || echo YES; else echo NO; if false || echo YES; ложь || ложь; затем повторить ДА; иначе повторить НЕТ;
$ if ! false; then echo YES; else echo NO; if ! true; then echo YES; else echo NO;
Это можно увидеть
истинныйи
ЛОЖЬМы действуем в соответствии с нашим пониманием логических операций, но чтобы лучше понять реализацию логических операций в Shell, нам нужно выяснить:
истинныйи
ЛОЖЬКак это работает?
Ответ: Нет.
истинныйи
ЛОЖЬСами по себе они не являются логическими значениями, это все встроенные команды оболочки, но их возвращаемое значение является «логическим значением»:
$ true$ echo $?0$ false$ echo $?1
можно увидеть
истинныйвернул 0, и
ЛОЖЬЗатем возвращается 1. Оно не соответствует истинным значениям 1 и 0, которые мы узнали в дискретной математике, а является противоположным.
$ help true falsetrue: true Возвращает успешный результат.false: false Возвращает неудачный результат.$ type true falsetrue — встроенная оболочка false — встроенная оболочка
проиллюстрировать:
$?Это специальная переменная, в которой хранится конечный статус (код статуса завершения) последнего процесса.
Из вышеперечисленных операций нетрудно догадаться, почему упор делается на программирование на языке Си.
основнойДобавьте перед функцией
интервали добавьте в конце
вернуть 0. Потому что в Shell 0 будет использоваться как признак успешного завершения программы.
истинныйи
ЛОЖЬПо сути, они используются для отражения того, правильно ли завершается определенная программа, а не традиционные значения true и false (1 и 0). Наоборот, они возвращают 0 и 1. К счастью, нам не нужно об этом беспокоиться при выполнении логических операций.
Из предыдущего раздела мы ясно поняли, что такое «логическое значение» в Shell: это возвращаемое значение при завершении процесса. Если он завершается успешно, это правда, если он возвращается неудачно, это ложь.
И условный тест просто использует
тестТакая инструкция используется для выполнения числовых тестов (различных тестов числовых атрибутов), строковых тестов (различных тестов строковых атрибутов) и файловых тестов (различных тестов атрибутов файлов). Мы оцениваем, является ли соответствующий тест успешным, тем самым после выполнения различных рутинных задач. , в сочетании с логическим сочетанием различных тестов можно выполнять более сложные задачи.
$ if test 5 -eq 5; then echo YES; else echo NO; if test 5 -ne 5; then echo YES; else echo NO;
$ if test -n не пусто; then echo YES; else echo NO; if test -z не пусто; then echo NO; if test -z ; then echo YES; если тест -n ;то эхо ДА; иначе эхо НЕТ;
$ if test -f /boot/System.map; then echo YES; else echo NO; if test -d /boot/System.map; then echo YES; else echo NO;
$ a=5;b=4;c=6;$ если проверка $a -eq 5 -a $b -eq 4 -a $c -eq 6, то echo YES; else echo fiYES;
$ if test -f /etc/profile -o -d /etc/profile;then echo YES; else echo fiYES;
!НЕ операция
$ если тест ! -f /etc/profile; тогда эхо ДА; иначе эхо НЕТ;
Вышеизложенное лишь демонстрирует
тестПроведите несколько очень простых тестов, которые вы сможете пройти.
помогите проверитьПолучать
тестБольше вариантов использования. Следует отметить, что
тестСуществуют некоторые различия между логическими операциями внутри команды и логическими операторами оболочки. Соответствующие они:
-аи
&&,
-ои
||, эти два понятия нельзя путать. Вместо того, чтобы операции были
!, сравните их ниже.
$ cat > test.sh#!/bin/bashecho test[CTRL+D] # Нажмите комбинацию клавиш CTRL и D, чтобы завершить ввод кота, так же, как показано ниже, больше не указывайте $ chmod +x test.sh$ if test -s test .sh -a -x test.sh; then echo YES; else echo NO; if test -s test.sh && test -x test.sh; then echo YES; else echo NO;
$ str1=test$ str2=test$ if test -z $str2 -o $str2 == $str1; then echo YES; else echo NO; fiYES$ if test -z $str2 || test $str2 == $str1; затем повторите ДА; иначе отобразите НЕТ;
$ i=5$ if test ! $i -lt 5 -a $i -ne 6; then echo NO; if ! test $i -lt 5 -a $i -eq 6; ; иначе эхо НЕТ;
Между ними легко заметить разницу,
-аи
-оВ качестве параметра тестовой команды он используется внутри тестовой команды и
&&и
||Он используется для расчета возвращаемого значения теста,
!Общее для обоих. Что требует внимания, так это:
Иногда это не обязательно
!оператор, например
-экви
-неНапротив, его можно использовать для проверки равенства двух значений;
-зи
-нОн также соответствует и используется для проверки того, является ли определенная строка пустой.
существовать
Башвнутри,
тестКоманды можно заменить оператором [], но следует отметить, что [
После этого с] должны предшествовать дополнительные пробелы
При тестировании строки рекомендуется заключать все переменные в двойные кавычки, чтобы предотвратить ситуацию, когда есть только тестовые параметры и нет тестового содержимого, когда содержимое переменной пусто.
Ниже мы используем примеры, чтобы продемонстрировать три вышеуказанные меры предосторожности:
-неи
-эквСоответственно, иногда можно обойтись и без
!Операция
$ i=5$ если тест $i -eq 5; тогда echo YES; else echo NO; if test $i -ne 5; then echo NO$ if test ! затем отобразить ДА; иначе отобразить НЕТ;
использовать
[ ]может заменить
тест, это будет выглядеть гораздо «красивее»
$ if [ $i -eq 5 ]; then echo YES; else echo NO; if [ $i -gt 4 ] && [ $i -lt 6 ]; then echo YES;
Не забудьте добавить несколько строковых переменных
,Помнить[После этого с
]Добавьте дополнительное пространство перед
$ str=$ if [ $str = test]; then echo YES; else echo NO; [: отсутствует `]'NO$ if [ $str = test ]; else echo NO; bash: [: =: унарный оператор ожидаемый NO$, если [ $str = test ]; then echo YES; else echo NO;
На этом этапе был введен условный тест . Список команд представлен ниже. Фактически, мы уже использовали его выше, то есть комбинацию нескольких тестовых команд.
&&,
||и
!Последовательность комбинированных команд. Эта последовательность команд эффективно заменяет
если/тоусловная ветвящаяся структура. Нетрудно придумать следующие вопросы с несколькими вариантами ответов, которые мы часто задаем при программировании на языке C (очень скучный, но содержательный пример): Будет ли напечатано следующее?
дж, если напечатать, что будет напечатано?
#include <stdio.h>int main(){ int i, j; i=5;j=1; if ((i==5) && (j=5)) printf(%dn, j); вернуть 0;}
Легко узнать, что число 5 будет напечатано, потому что
я == 5Это условие выполняется, и впоследствии
&&, чтобы судить о том, установлено ли все условие, мы должны вынести последующее суждение, но это суждение не является обычным суждением, а сначала
джИзмените его на 5, а затем преобразуйте в истинное значение, чтобы условие было истинным и печаталось 5. Следовательно, это предложение можно интерпретировать так: Если
яравно 5, то положим
джПрисвойте значение 5, если
джбольше 1 (потому что это уже было верно раньше), затем распечатайте
джценить. Используйте это таким образом
&&Объединенное судебное решение заменяет два
еслиОператор условного перехода.
Именно он основан на уникальных свойствах логических операций, которые мы можем передавать
&&,
||заменить
если/тоДождитесь структуры условного перехода, создав таким образом список команд.
Правила выполнения списка команд соответствуют правилам работы логических операций.
&&Для подключенных команд, если первая возвращается успешно, будет выполнена следующая команда, в противном случае используйте;
||Если подключенные команды возвращаются успешно, последующие команды не будут выполнены, и наоборот.
$ ping -c 1 www.lzu.edu.cn -W 1 && echo =======connected========
Возникает очень интересный вопрос, о котором мы говорили выше: почему программа на языке C должна быть
основной()Возвращает ли функция 0 в конце? Если нет, то каковы будут последствия включения такой программы в список команд? Напишите простую программу на C самостоятельно, а затем поместите ее в список команд, чтобы посмотреть.
Иногда вместо этого используется список команд.
если/тоСтруктура условного перехода позволяет сэкономить часть кода и сделать программу более красивой и удобной для чтения, например:
#!/bin/bashecho $#echo $1if [ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null);then echo YESfi
Примечание. В приведенном выше примере требуется, чтобы количество параметров было равно 1, а их тип был числовым.
Плюс
выход 1, мы опустим
если/тоструктура
#!/bin/bashecho $#echo $1! ([ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null)) && выход 1echo YES
После этой обработки для оценки параметров программы требуется всего лишь простая строка кода, и она становится более красивой.
В этом разделе представлены логические операции, условное тестирование и списки команд в программировании на языке Shell.