Пример 7-2. Эквиваленты команды test -- /usr/bin/test, [ ], и /usr/bin/[

Пример 7-2. Эквиваленты команды test -- /usr/bin/test, [ ], и /usr/bin/[

#!/bin/bash

echo

if test -z "$1"

then

echo "Аргументы командной строки отсутствуют."

else

echo "Первый аргумент командной строки: $1."

fi

echo

if /usr/bin/test -z "$1" # Дает тот же рузультат, что и встроенная команда "test".

then

echo "Аргументы командной строки отсутствуют."

else

echo "Первый аргумент командной строки: $1."

fi

echo

if [ -z "$1" ] # Функционально идентично вышеприведенному блоку кода.

# if [ -z "$1" эта конструкция должна работать, но...

#+ Bash выдает сообщение об отсутствующей закрывающей скобке.

then

echo "Аргументы командной строки отсутствуют."

else

echo "Первый аргумент командной строки: $1."

fi

echo

if /usr/bin/[ -z "$1" # Функционально идентично вышеприведенному блоку кода.

# if /usr/bin/[ -z "$1" ] # Работает, но выдает сообщение об ошибке.

then

echo "Аргументы командной строки отсутствуют."

else

echo "Первый аргумент командной строки: $1."

fi

echo

exit 0

Конструкция [[ ]] более универсальна, по сравнению с [ ]. Этот расширенный вариант команды test перекочевал в Bash из ksh88.

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

file=/etc/passwd

if [[ -e $file ]]

then

echo "Файл паролей найден."

fi

Конструкция [[ ... ]] более предпочтительна, нежели [ ... ], поскольку поможет избежать некоторых логических ошибок. Например, операторы &&, ||, < и > внутри [[ ]] вполне допустимы, в то время как внутри [ ] порождают сообщения об ошибках.

Строго говоря, после оператора if, ни команда test, ни квадратные скобки ( [ ] или [[ ]] ) не являются обязательными.

dir=/home/bozo

if cd "$dir" 2>/dev/null; then # "2>/dev/null" подавление вывода сообщений об ошибках.

echo "Переход в каталог $dir выполнен."

else

echo "Невозможно перейти в каталог $dir."

fi

Инструкция "if COMMAND" возвращает код возврата команды COMMAND.

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

var1=20

var2=22

[ "$var1" -ne "$var2" ] && echo "$var1 не равно $var2"

home=/home/bozo

[ -d "$home" ] || echo "каталог $home не найден."

Внутри (( )) производится вычисление арифметического выражения. Если результатом вычислений является ноль, то возвращается 1, или "ложь". Ненулевой результат дает код возврата 0, или "истина". То есть полная противоположность инструкциям test и [ ], обсуждавшимся выше.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Глава 27. Клавиатурные эквиваленты для работы с окнами

Из книги Секреты сканирования на ПК автора Леонтьев Б К

Глава 27. Клавиатурные эквиваленты для работы с окнами Ctrl + TabПереключиться между активизированными окнами.Alt +1Активизировать окно Пакет.Alt +2 Активизировать диалоговое окно Изображение.Alt +3 Активизировать диалоговое окно


8.6. rc.test-iptables.txt

Из книги Iptables Tutorial 1.1.19 автора Andreasson Oskar

8.6. rc.test-iptables.txt Сценарий rc.test-iptables.txt предназначен для проверки различных цепочек но может потребовать дополнительных настроек, в зависимости от вашей конфигурации, например, включения ip_forwarding или настройки masquerading и т.п. Тем не менее в большинстве случаев с базовыми


5.8.1 Операторы if и test (или [])

Из книги Google. Прорыв в духе времени автора Малсид Марк

5.8.1 Операторы if и test (или []) Конструкция условного оператора в слегка упрощенном виде выглядит так: if list1 then list2 else list3 fi где list1, list2 и list3 - это последовательности команд, разделенные запятыми и оканчивающиеся точкой с запятой или символом новой строки. Кроме того, эти


5.8.2 Оператор test и условные выражения

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

5.8.2 Оператор test и условные выражения Условные выражения, используемые в операторе test, строятся на основе проверки файловых атрибутов, сравнения строк и обычных арифметических сравнений. Сложные выражения строятся из следующих унарных или бинарных операций


GLAT (Google Labs Aptitude Test)

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

GLAT (Google Labs Aptitude Test) Умеете ли вы решать головоломки вроде тех, с которыми каждый день сталкиваются специалисты Google Labs? Пройдите GLAT и узнаете. Постарайтесь ответить на все вопросы, вложите заполненный бланк[16] в конверт и отправьте в Google Labs. Если наберете достаточное


16.1. Библиотека Test::Unit

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель


20.6. Пример команды open

Из книги Операционная система UNIX автора Робачевский Андрей М.

20.6. Пример команды open Ниже показан пример кода, выполняющий следующие задачи: поиск неиспользуемой VC, запуск на ней оболочки, ожидание завершения оболочки, переключение обратно, а также освобождение памяти, выделенной под VC, по завершении программы. Программа open, входящая


Пример 11-9. Демонстрация команды eval

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Пример 11-9. Демонстрация команды eval #!/bin/bashy=`eval ls -l` # Подобно y=`ls -l`echo $y # но символы перевода строки не выводятся, поскольку имя переменной не в кавычках.echoecho "$y" # Если имя переменной записать в кавычках -- символы перевода строки сохраняются.echo; echoy=`eval df` # Аналогично


Команда test

Из книги Linux Mint и его Cinnamon. Очерки применителя автора Федорчук Алексей Викторович


1.7.1. Пример использования команды chown

Из книги автора

1.7.1. Пример использования команды chown Вот как можно поменять владельца файла с помощью команды chown:$ ls -l-rwxrwxrwx 1 louise admin 345 Sep 20 14:33 project$ chown pauline project $ ls -l-rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 projectПраво владения файлом project переходит от пользователя louise к


1.7.2. Пример использования команды chgrp

Из книги автора

1.7.2. Пример использования команды chgrp Следующий пример демонстрирует, как поменять группу, которой принадлежит файл:$ ls -1-rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 project$ chgrp sysadmin project $ ls -1-rwxrwxrwx 1 pauline sysadmin 345 Sep 20 14:33 projectПользователь pauline передал группе sysadmin право владения файлом project, которое до


Google Test Analytics

Из книги автора

Google Test Analytics Несмотря на то что анализ рисков нужен разработке как воздух, этот процесс часто происходит как попало. Если данным вообще удается покинуть головы участников команды, то часто они просто фиксируются в таблицах. Что в этом плохого?— У данных нет единой схемы,


Google Test Analytics — теперь с открытым кодом

Из книги автора

Google Test Analytics — теперь с открытым кодом Среда, 10 октября 2011 г., 13:03http://googletesting.blogspot.com/2011/10/google-test-analytics-now-in-open.htmlДжим РирдонТест-план мертв!Ну, мы на это надеемся. Неделю назад на семинаре STAR West Джеймс Уиттакер выяснил мнение профессиональных тестировщиков о тест-планах. Его


Пример: опции команды ls

Из книги автора

Пример: опции команды ls Опции определяют условия выполнения команды. На предыдущей странице был приведён пример команды ls без опций. Однако на самом деле отсутствием опций при ней определяется вид выводимого списка по умолчанию — как многоколочночного списка,