Искусство программирования на языке сценариев командной оболочки
Шрифт:
timedout_read $INTERVAL your_name
# Такой прием может не работать на некоторых типах терминалов.
# Максимальное время ожидания зависит от терминала.
# (чаще всего это 25.5 секунд).
echo
if [ !
– z "$your_name" ] # Если имя было введено...
then
echo "Вас зовут $your_name."
else
echo "Вы
fi
echo
# Алгоритм работы этого сценария отличается от "timed-input.sh".
# Каждое нажатие на клавишу вызывает сброс счетчика в начальное состояние.
exit 0
Возможно самый простой способ -- использовать опцию – t команды read.
Пример 9-4. Ограничение времени ожидания команды read
#!/bin/bash
# t-out.sh
TIMELIMIT=4 # 4 секунды
read -t $TIMELIMIT variable <&1
echo
if [ -z "$variable" ]
then
echo "Время ожидания истекло."
else
echo "variable = $variable"
fi
exit 0
$UID
user id number
UID (идентификатор) текущего пользователя, в соответствии с /etc/passwd
Это реальный UID текущего пользователя, даже если он временно приобрел права другого пользователя с помощью su. Переменная $UID доступна только для чтения.
Пример 9-5. Я -- root?
#!/bin/bash
# am-i-root.sh: Root я, или не root?
ROOT_UID=0 # $UID root-а всегда равен 0.
if [ "$UID" -eq "$ROOT_UID" ] # Настоящий "root"?
then
echo "- root!"
else
echo "простой пользователь (но мамочка вас тоже любит)!"
fi
exit 0
# ============================================================= #
# Код, приведенный ниже, никогда не отработает,
#+ поскольку работа сценария уже завершилась выше
# Еще один способ отличить root-а от не root-а:
ROOTUSER_NAME=root
username=`id -nu` #
if [ "$username" = "$ROOTUSER_NAME" ]
then
echo "Рутти-тутти.
– root!"
else
echo "Вы - лишь обычный юзер."
fi
См. также Пример 2-2.
tcsh% echo $LOGNAME
bozo
tcsh% echo $SHELL
/bin/tcsh
tcsh% echo $TERM
rxvt
bash$ echo $LOGNAME
bozo
bash$ echo $SHELL
/bin/tcsh
bash$ echo $TERM
rxvt
Позиционные параметры (аргументы)
$0, $1, $2 и т.д.
аргументы передаются... из командной строки в сценарий, функциям или команде set (см. Пример 4-5 и Пример 11-13)
$#
количество аргументов командной строки [ 20 ] , или позиционных параметров (см. Пример 33-2)
20
Слова "аргумент" и "параметр" очень часто используются как синонимы. В тексте данного документа, они применяются для обозначения одного и того же понятия, будь то аргумент, передаваемый скрипту из командной строки или входной параметр функции.
$*
Все аргументы в виде одной строки (слова)
$@
То же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово), т.е. параметры не подвергаются какой либо интерпретации.
Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@
#!/bin/bash
# Вызовите сценарий с несколькими аргументами, например: "один два три".