#!/bin/bash
# ex33a.sh
# Попробуйте следующие варианты вызова этого сценария.
# sh ex33a -a
# sh ex33a -abc
# sh ex33a -a -b -c
# sh ex33a -d
# sh ex33a -dXYZ
# sh ex33a -d XYZ
# sh ex33a -abcd
# sh ex33a -abcdZ
# sh ex33a -z
# sh ex33a a
# Объясните полученные результаты.
E_OPTERR=65
if [ "$#" -eq 0 ]
then # Необходим по меньшей мере один аргумент.
echo "Порядок использования: $0 -[options a,b,c]"
exit $E_OPTERR
fi
set -- `getopt "abcd:" "$@"`
# Запись аргументов командной строки в позиционные параметры.
# Что произойдет, если вместо "$@" указать "$*"?
while [ ! -z "$1" ]
do
case "$1" in
-a) echo "Опция \"a\"";;
-b) echo "Опция \"b\"";;
-c) echo "Опция \"c\"";;
-d) echo "Опция \"d\" $2";;
*) break;;
esac
shift
done
# Вместо 'getopt' лучше использовать встроенную команду 'getopts',
# См. "ex33.sh".
exit 0
run-parts
Команда run-parts
[ 33 ] запускает на исполнение все сценарии, в порядке возрастания имен файлов-сценариев, в заданном каталоге. Естественно, файлы сценариев должны иметь права на исполнение.Демон crond вызывает run-parts
для запуска сценариев из каталогов /etc/cron.*.yes
По-умолчанию, команда yes
выводит на stdout непрерывную последовательность символов y, разделенных символами перевода строки. Исполнение команды можно прервать комбинацией клавиш control-c. Команду yes можно заставить выводить иную последовательность символов. Теперь самое время задаться вопросом о практической пользе этой команды. Основное применение этой команды состоит в том, что вывод от нее может быть передан, через конвейер, другой команде, ожидающей реакции пользователя. В результате получается, своего рода, слабенькая версия команды expect.yes | fsck /dev/hda1
запускает fsck в неинтерактивном режиме (будьте осторожны!).yes | rm -r dirname
имеет тот же эффект, что и rm -rf dirname (будьте осторожны!). Внимание! Передача вывода команды yes
по конвейеру потенциально опасным командам, таким как fsck или fdisk может дать нежелательные побочные эффекты.banner
Печатает на stdout
заданную строку символов (не более 10), рисуя каждый символ строки при помощи символа '#'. Вывод от команды может быть перенаправлен на принтер.printenv
Выводит все переменные окружения текущего пользователя.
bash$
printenv | grep HOMEHOME=/home/bozo
lp
Команды lp
и lpr отправляют файлы в очередь печати[ 34 ] для вывода на принтер. Названия этих команд произошли от "line printers".bash$
lp file1.txt или bash lp Очень часто используются в комбинации с командой форматированного вывода pr
.bash$
pr -options file1.txt | lpПрограммы подготовки текста к печати, такие как groff
и Ghostscript, так же могут напрямую взаимодействовать с lp.bash$
groff -Tascii file.tr | lpbash$
gs -options | lp file.psКоманда lpq
предназначена для просмотра очереди заданий печати, а lprm -- для удаления заданий из очереди.tee
[UNIX заимствовал эту идею из водопроводного дела.]
Это опрератор перенаправления, но с некоторыми особенностями. Подобно водопроводным трубам, "tee" позволяет "направить поток" данных в несколько файлов
и на stdout одновременно, никак не влияя на сами данные. Эта команда может оказаться очень полезной при отладке. tee
|------> в файл
|
===============|===============
command--->----|-operator-->---> результат работы команд(ы)
===============================
cat listfile* | sort | tee check.file | uniq > result.file
(Здесь, в файл check.file
будут записаны данные из всех "listfile*", в отсортированном виде до того, как повторяющиеся строки будут удалены командой uniq.)mkfifo