UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$ cat watchwho# watchwho: watch who logs in and outPATH=/bin:/usr/binnew=/tmp/wwho1.$$old=/tmp/wwho2.$$> $old # create an empty filewhile : # loop foreverdo who >$new diff $old $new mv $new $old sleep 60done | awk '/>/ { $1 = "in: "; print } /</ { $1 = "out: "; print }'$только обрабатывает свои аргументы и возвращает код "истина". Мы могли бы заменить ее командой
truefalse':'В выводе команды
diff<>awkawkawksedПоскольку файл
oldwatchforoldwho > $oldwatchforДругая программа в цикле следит за содержимым вашего почтового ящика: как только оно изменяется, программа выдает сообщение: "You have a mail" ("У вас есть почта"). Такая программа является полезной альтернативой встроенному в интерпретатор механизму, использующему переменную
MAIL$ cat checkmail# checkmail: watch mailbox for growthPATH=/bin:/usr/binMAIL=/usr/spool/mail/`getname` # system dependentt=${1-60}x="`ls -l $MAIL`"while :do y="`ls -l $MAIL`" echo $x $y x="$y" sleep $tdone | awk '$4 < $12 { print "You have mail" }'$Мы опять воспользовались
awkОбычно интервал времени устанавливается равным 60 с, но если командная строка содержит параметр, например
$ chekmail 30то интервал задается им. Переменная интерпретатора принимает в качестве значения заданное параметрами время или 60 с, если время не задано, с помощью присваивания
t=${1-60}Это еще одна возможность языка
shell${var}$var$ var=hello$ varx=goodbye$ echo $varhello$ echo ${var}xhellox$Определенные символы внутри фигурных скобок задают специальную обработку переменной. В том случае, когда переменная не определена и за ее именем идет знак вопроса, выдается строка, следующая за символом
?$ echo ${var?}hello $ echo ${junk}junk: parameter not set $ echo ${junk?error!}junk: error! $Отметим, что в сообщении, выдаваемом интерпретатором, всегда указывается имя неопределенной переменной.
В другой конструкции
${var-thing}$varthing${var-thing}$varthing$ echo ${junk-'Hi there'}Hi there$ echo ${junk?)junk: parameter not set $ echo {junk='Hi there'}Hi there$ echo ${junk?}Hi there
