UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
read Summaryif get -o /tmp/put.a$$ $1 # previous versionthen # merge pieces cp $1 /tmp/put.b$$ # current version echo"@@@ `getname` `date` $Summary" >>/tmp/put.b$$ diff -e $1 /tmp/put.a$$ >>/tmp/put.b$$ # latest diffs sed -n '/^@@@/,$p' <$HIST >>/tmp/put.b$$ # old diffs overwrite $HIST cat /tmp/put.b$$ # put it backelse # make a new one echo "put: creating $HIST" cp $1 $HIST echo "@@@ `getname` `date` $Summary" >>$HISTfirm -f /tmp/put.[ab]$$После считывания одной строки сводки команда
putget-оgetgetputthen@@@overwriteКоманда
getput# get: extract file from historyPATH=/bin:/usr/binVERSION=0while test "$1" != ""do case "$1" in -i) INPUT=$2; shift ;; -o) OUTPUT=$2; shift ;; -[0-9]) VERSION=$1 ;; -*) echo "get: Unknown argument $i" 1>&2; exit 1 ;; *) case "$OUTPUT" in "") OUTPUT=$1 ;; *) INPUT=$1.H ;; esac esac shiftdoneOUTPUT=${OUTPUT?"Usage: get [-o outfile] [-i file.H] file"}INPUT=${INPUT-$OUTPUT.H}test -r $INPUT || { echo "get: no file $INPUT" 1>&2; exit 1; }trap 'rm -f /tmp/get.[ab]$$; exit 1' 1 2 15# split into current version and editing commandssed <$INPUT -n '1,/^@@@/w /tmp/get.a'$$'/^@@@/,$w /tmp/get.b'$$# perform the editsawk </tmp/get.b$$ ' <a href="">/^@@@/</a> { count++ } !/^@@@/ && count > 0 && count <= - "$VERSION" END { print "$d"; print "w", "'$OUTPUT'" }' | ed - /tmp/get.a$$rm -f /tmp/get.[ab]$$Флаги выполняют обычные функции:
-i-о-[0-9]-0-1whiletestshiftfor-i-оshiftforedСтрока
test -r $INPUT || {echo "get: no file $INPUT" 1>&2; exit 1;}эквивалентна конструкции
if test ! -r $INPUTthen echo "get: no file $INPUT" 1>&2 exit 1fi(такую конструкцию мы использовали в команде
put||{}exitget{}dodoneВ заключение мы рассмотрим те команды в
getsedawk@@@awked$d@@@sedwoverwriteget
