Основы Shell Script. Часть II.
if условие then команды, если условие верно else команды, если условие ложно fiЕстественно, возможна запись сокращенного варианта, без else. При создании цепочек вложенных операторов - if else if, вместо else if можно использовать сокращенный вариант - elif. Условие считается истинным, если код завершения команды равен 0. В условии может стоять любая команда. Для того чтобы проверить различные условия сравнения и не только используется команда test. Эта же команда может быть записана в более удобном виде: [ ] - в скобках помещается само условие (между скобками и условием обязательно должны быть пробелы). Пример:
#!/bin/sh a=test b=test if [ $a = $b ] then echo "a=b" fi
Здесь выполняется проверка строк a и b, и, соответственно, будет выведено сообщение "a=b". С помощью test можно проверять различные условия: Для строк: a = b - строки a и b совпадают a != b - строки не совпадают -n a - строка a не пустая -z a - строка a пустая Для целых чисел (строки будут интерпретированы как числа): a -eq b - a равно b a -ne b - a не равно b a -gt b - a больше b a -ge b - a больше или равно b a -lt b - a меньше b a -le b - a меньше или равно b Для файлов: -f file - файл является обычным файлом -d file - файл является каталогом -с file - файл является специальным -r file - есть права на чтение -w file - есть права на запись В условиях можно использовать логические операции И, ИЛИ, НЕ: ! - НЕ -o - ИЛИ -a - И Например, здесь проверяется условие "если a не равно b И с равно 0":
#!/bin/sh a=5; b=10; c=0 if [ $a -ne $b -a $c -eq 0 ] then echo OK else echo Error fi
Оператор case.
Оператор выбора case выглядит так:
case строка шаблон) команды;; шаблон) команды;; *) команды;; ... esac
Если значение строки не совпало ни с одним из шаблонов, то выполняются команды после *). Разумеется, можно и не указывать *), если в этом нет необходимости.
Циклы.
В shell есть три типа циклов - с перечислением (for), с истинным условием (while) и с ложным условием (until).
for имя_переменной [ in список значений ] do ... done
Переменной, являющейся параметром цикла, присваиваются значения, перечисленные в списке. Запись " for имя_переменной in * " означает выполнение цикла для всех файлов текущего каталога.
#!/bin/sh for i in $* do echo $i done
В этом примере будут последовательно отображены параметры командной строки, переданные при вызове сценария. $* - переменная, содержащая эти параметры.
while условие do ... done
Здесь все очень просто - команды, помещенные между do и done будут выполняться до тех пор, пока верно условие. Напомним, что условие считается верным, если код завершения команды, стоящей в условии, равен нулю.
unitl условие do ... done
Цикл until аналогичен предыдущему, но отличается тем, что команды будут выполняться до тех пор, пока условие ложно. Во всех циклах можно применять ключевые слова break и continue. Первое означает, что из цикла необходимо выйти досрочно, выполнение команд, помещенных в тело цикла прекращается; continue используется для того, чтобы перейти досрочно на следующее повторение цикла. Т.е. если достигнув какой-то команды в цикле нет необходимости выполнять следующие, но нужно начать цикл с начала. Пример:
#!/bin/sh a=5 while [ $a -lt 10 ] do echo $a a=`expr $a + 1` if [ $a -eq 7 ] then break fi done
Условием цикла здесь является a < 10, в теле цикла переменная a увеличивается на еденицу. Однако цикл завершится досрочно, когда значение a будет равно 7, так как при этом выполнится оператор break.
Функции.
Функции в shell обозначаются так:
имя_функции() { ... }
После описания функции, к ней можно обращаться по имени, так же как к любой другой команде. Функции можно передавать аргументы, только не так как это делается чаще всего в других языках программирования - в скобках, а с помощью позиционных параметров. Т.е. точно так же как вызов какой -либо внешней команды с аргументами командной строки. Выполнение функции можно прервать с помощью оператора return. С помощью него же можно возвратить код завершения (return 0; return 1;), опять же - аналогия с выполнением внешней команды. Ну вот, попытка кратко изложить shell script на нескольких страницах завершена. Этого уже достаточно, чтобы писать несложные скрипты. Для более детального ознакомления с shell можно порекомендовать книгу "А.Соловьев программирование на shell (UNIX)". И, разумеется, изучение соответствующих команд - это, пожалуй, ключевой момент.
Теги: Unix shell
comments powered by Disqus