UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Типичным считается цикл по последовательности имен файлов, и оператор
forshellforfor перем in список_словdo командыdoneНапример, для получения эха имен файлов по одному на строке достаточно задать:
$ for i in *> do> echo $i> doneВместо
ishell$ii*old$ ls ch2. * | 5ch2.1 ch2.2 ch2.3 ch2.4 ch2.5ch2.6 ch2.7$ for i in ch2.*> do> echo $i> diff -b old/$i $i> echo > done | pr -h "diff `pwd`/old `pwd` | lpr &3712 $Выходной поток направлен по конвейеру через команды
prlprforfor-hpwd&&Мы предпочитаем указанный формат для цикла
fordodoneforfor i in список; do команды; doneСледует использовать цикл
for# Плохая идея:for i in $*do chmod +x $idoneПредпочтительнее сделать так:
chmod +x $*поскольку в цикле
forchmodfor i in *в которой цикл выполняется по всем именам файлов текущего каталога, и
for i in $*в которой цикл выполняется по всем аргументам командного файла.)
Список аргументов для цикла
forfor i in `cat ...`или просто вводом аргументов. Например, ранее в этой главе мы создали ряд программ для печати в несколько столбцов под именами
232$ for i in 3 4 5 6; do ln 2 $i; done$Цикл
forpick$ for i in `pick ch2.*`> do> echo $i:> diff old/$i $i> done | pr | lprch2.1? ych2.2ch2.3ch2.4? ych2.5? ych2.6?ch2.7?$Очевидно, данный цикл следует поместить в командный файл, чтобы уменьшить ввод в следующий раз (ведь если вы что-то сделали дважды, вероятно, вы сделаете это и в третий раз).
Если цикл с командой
diffЧто произойдет, если последняя строка приведенного цикла будет иметь вид:
> done | pr | lpr &т.е. кончаться амперсандом? Попробуйте сделать прогноз, а затем проверьте его.
3.9 Программа
bundleЧтобы лучше понять, как создаются командные файлы, обратимся к такому примеру. Предположим, вы получили почту от приятеля с другой машины:
"где-то!боб"mail(1)bin
