BEGIN=45
INTERVAL=5
END=80
for a in `seq $BEGIN $INTERVAL $END`
# Если "seq" передется три аргумента, то первый аргумент -- начальное число в последовательности,
#+ второй -- шаг последовательности,
#+ и третий -- последнее число в последовательности.
do
echo -n "$a "
done # 45 50 55 60 65 70 75 80
echo; echo
exit 0
getopt
Команда getoptслужит для разбора командной строки, выделяя из нее ключи -- символы, с предшествующим знаком дефис. Этой утилите имеется, встроенный в Bash, аналог -- getopts, более мощная и универсальная команда.
Пример 12-40. Использование getopt для разбора аргументов командной строки
#!/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 ] Фактически -- это сценарий, заимствованный из дистрибутива Debian Linux.
запускает на исполнение все сценарии, в порядке возрастания имен файлов-сценариев, в заданном каталоге. Естественно, файлы сценариев должны иметь права на исполнение.
Демон 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 HOME
HOME=/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 | lp
bash$ gs -options | lp file.ps
Команда lpqпредназначена для просмотра очереди заданий печати, а lprm-- для удаления заданий из очереди.
tee
[UNIX заимствовал эту идею из водопроводного дела.]
Это опрератор перенаправления, но с некоторыми особенностями. Подобно водопроводным трубам, "tee" позволяет "направить поток" данных в несколько файлов и на stdout одновременно, никак не влияя на сами данные. Эта команда может оказаться очень полезной при отладке.
tee
|------> в файл
|
Читать дальше