Команда ":" осуществляет анализ командной строки, но не выполняет ее. Всегда завершается успешно. Конструкция:
#!/bin/bash
: $[a=2*2]
echo "a=$a"
выведет:
a=4.
Значение переменной $a было присвоено в результате "побочного эффекта" анализа, выполненного командой ":".
Команда source или "." выполняет команды из указанного файла в текущем BASH, без запуска нового, как если бы содержимое файла набиралось на клавиатуре. Это позволяет, в отличие от выполнения скрипта, запомнить изменения в environment, определения функций и прозвищ. Используя эту команду, в программу можно включать "библиотечные" функции, определенные в других файлах.
Команда enable запрещает (-n) или снова разрешает применение встроенной команды. При запрете вместо встроенной команды ищется файл, если его нет - ошибка.
Команда exec. Если имеет аргумент, заменяет текущий процесс (BASH) на выполняемую команду, и к BASH возврата уже не происходит:
PerlProgram $scriptname && exec perl $scriptname.
Если аргумент не указан, но указаны символы перенаправления, exec устанавливает эти перенаправления, и выполнение текущего скрипта продолжается. Подробнее см. 2.3.5.
Таким образом достигается "динамическое" перенаправление:
echo Эта строка выводится на экран
exec >file.txt
echo А эта строка в файл
echo И эта в файл
Более того, можно открывать для ввода или вывода новые дескрипторы:
# создать файл-пример для последующего чтения
cat << EOF >user.rsp
29.06.77
30.01.85
EOF
exec 3>file.log
exec 4<user.rsp
echo Вводим дату через дескриптор 4
read d <&4
echo Дата получена и будет записана через дескриптор 3
Действует аналогично Си-функции getopt . Названия опций состоят из букв, соответствующих опциям. Если опция требует аргумент, после буквы ставится двоеточие.
Понимает "-" и дальше опции строку не рассматривает. Не понимает длинные опции (-опция).
! Если есть альтернативные аргументы, то анализируют их, а не $1-$n.
Если опция имеет аргумент, он помещается в OPTARG.
OPTIND сначала равен 1, затем getopts его увеличивает. Если надо запустить getopts снова, надо снова присвоить единицу.
После первого неудачного запуска getopts ($? не равен 0) $OPTIND равен номеру первого аргумента, не являющегося опцией, если такой есть ($OPTIND <= $#). Чтобы обработать этот и последующие аргументы, нельзя писать ${$OPTIND}, поскольку номер параметра должен быть константой. Вместо этого нужно сделать:
shift $[$OPTIND-1]
и обращаться к $1 и т. д.
Если ошибочная опция, в переменной присваивается "?", и выдается сообщение об ошибке. Чтобы запретить вывод сообщений, надо или OPTERR=0 (по умолчанию 1), или первый символ в названиях опций ":". Пример:
Команда hash показывает таблицу запомненных расположений команд. Можно стереть (-r), вопрос только в том, зачем то и другое.
Команды pushd, popd, dirs.
Команда dirs выводит стек запомненных директорий.
Команда popd удаляет или последнюю запомненную, или такую-то по счету сверху стека (+0..n) или снизу (-0..n).
Команда type похожа на команду which. Дает информацию о том, как была бы интерпретирована команда, будь она набрана в командной строке: Полное имя файла или сообщение типа 'shell builtin' или 'aliased to...'. Можно задать только тип (-t): file, builtin, alias, keyword. Если вывести все альтернативы (-a), например:
type -a ls,
вернет: "/bin/ls и ls is aliased to `gnuls --color=tty'".
Команда ulimitпоказывает или устанавливает ограничения на что-либо. Можно показать все ограничения (-a).
Команда umaskпоказывает атрибуты, с которыми создаются файлы данного пользователя. Без параметров показывает текущие в виде числа или букв (-S).