Лекция: Внутренние переменные
Значения внутренних переменных устанавливаются самим интерпретатором. Вне контекста получения значения переменные этого типа смысла не имеют. Эти переменные редко используются в командной строке, основная область их применения – скрипты.
$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 |