Значения внутренних переменных устанавливаются самим интерпретатором. Вне контекста получения значения переменные этого типа смысла не имеют. Эти переменные редко используются в командной строке, основная область их применения – скрипты.
$0
| имя запущенного скрипта
|
$1, $2,...
| позиционные параметры скрипта
|
$#
| число позиционных параметров скрипта
|
$?
| код возврата последнего выполненного процесса
|
$$
| PID текущего shell
|
$!
| PID последнего процесса, запущенного в фоновом режиме
|
$*
| все параметры, переданные скрипту; передаются как единое слово, будучи заключенным в кавычки:
“$*” = “$1 $2 $3... “
|
#@
| все параметры, переданные скрипту; передаются как отдельные слова, заключенные в кавычки:
“$*” = “$1” “$2” “$3”...
|
Примеры:
Текст скрипта:
#!/bin/bash
echo ***MY_SCRIPT_1 $0 ***
echo $1 $2 $3 #печать трех параметров
shift #сдвиг значений аргументов на 1 позицию
echo $1 $2 $3 #
| Запуск скрипта:
…~>./scr1.sh a1 a2 a3 a4
***MY_SCRIPT_1 scr1.sh ***
a1 a2 a3
a2 a3 a4
|
Текст скрипта:
#!/bin/bash
echo ***MY_SCRIPT_2 $0 ***
if [ $# -lt 2 ] #если число параметров меньше 2-х
then
echo usage: $0 arg1 arg2
exit 1
fi
| Запуск скрипта:
…~>./scr2.sh
***MY_SCRIPT_1 scr2.sh ***
usage: scr2.sh arg1 arg2
…~>./scr2.sh a1 a2
***MY_SCRIPT_1 scr2.sh ***
|
Код возврата последней выполненной задачи ($?) удобно использовать в условных выражениях. По правилам успешным завершением задачи считается код возврата, равный 0, ненулевой код свидетельствует об ошибке. Код возврата скриптов генерируется с помощью команды exit n, где n – целое число. Пример:
echo ***MY_SCRIPT_3 $0 ***
# зарегистрирован ли в системе пользователь с именем alla
# проверяется файл passwd на наличие слова alla и в случае удачи grep возвращает 0
grep alla /etc/passwd
if [ $? –ne 0 ] #если код возврата последнего выполненного процесса = 0, то слово alla найдено
then
echo пользователь alla в системе зарегистрирован
exit 1
fi
|