можно проверять различные условия, полный
if test -e имя_файла then echo <файл существует!>
Язык sh допускает конструкцию [ ] вместо команды test:
if [ -e имя_файла ] then echo <файл существует!>
Эта конструкция эквивалентна вышеприведенной.
С помощью test и [ ] можно проверять различные условия, полный список которых содержится в man test или man sh, man bash.
Некоторые программы всегда возвращают код завершения ноль. Это легко использовать для организации бесконечных циклов. Такие циклы могут понадобиться для перезапуска процессов, имеющих тенденцию к неожиданному и ненужному завершению. Например, так можно запускать процесс pppd для соединения с провайдером по выделенной или коммутируемой линии:
while sleep 10 do /usr/sbin/pppd done
Программа sleep всегда будет возвращать ноль, так что цикл никогда не прервется и будет исправно запускать pppd всякий раз, как только он завершится, например, из-за ошибки связи. Десять секунд ожидания добавлены просто для того, чтобы было время переждать неблагоприятную ситуацию, из-за которой произошла ошибка.
В Solaris и других системах System V такое применение менее полезно, чем в BSD-системах, так как того же эффекта можно добиться, указывая вызов pppd в /etc/inittab с указанием режима запуска respawn (запустить, если завершится).
Оператор for (цикл повторяется для каждого значения из списка):
for имя_переменной in список do команды done
Оператор цикла for используется особенно часто, например, для однотипной модификации нескольких файлов сразу. Предположим, надо во всех файлах *.html в текущем каталоге изменить ссылку на файл с фотографией:
for i in *.html do sed 's/otello.gif/dezdemona.gif/g' $i >tmp mv -f tmp $i done
Поскольку sed не меняет файл, а лишь выдает измененный текст в свой выходной поток, приходится перенаправлять вывод во временный файл tmp (назовите ваш файл по вкусу, от названия ничего не зависит) и затем переименовать tmp в файл с тем же именем, что у исходного файла. В момент переименования старый файл, естественно, исчезнет.
При вызове sed: следует писать именно $i, а не просто i, чтобы командный процессор подставил в командную строку значение переменной i, а не символ i.
Сразу перенаправить вывод в файл, имя которого указывается как $i, нельзя, поскольку перенаправление вывода в существующий файл вызовет уничтожение его прежнего содержимого. Это значит, что одновременное перенаправление ввода и вывода из/в один и тот же файл недопустимо.
Программе mv дается ключ -f, который требует от нее выполнить работу, не задавая вопросов типа "а вы действительно хотите уничтожить файл?"
Для вывода информации в sh принято использовать команду echo. Эта команда печатает в стандартный выходной поток свои аргументы, а в конце вывода выполняет перевод строки.
Команда
echo -n строка
выводит строку и не добавляет перевод строки в конце.
Для ввода информации в скриптах на языке sh используют оператор read:
read name echo "Name is $name"
Язык, реализованный в вашем командном процессоре, может быть богаче, чем описанный здесь минимальный стандарт. Для получения дополнительной информации обратитесь к man по вашему командному процессору.
Содержание Назад Вперед