bash/sh: специальные переменные (код возврата, pid, параметры запуска и т.д.)




749
bash/sh: специальные переменные (код возврата, pid, параметры запуска и т.д.)
Рейтинг 10 из 10. Голосов: 267
Ваша оценка:
В bash/sh во время выполнения скриптов доступен ряд специальных переменных. Давайте рассмотрим их.


$1-$9

Это параметры командной строки. Т.е. то, что пользователь ввел через пробел после названия самого скрипта.

Например:
$ ./myscript.sh first second "third and more"

Здесь:
  • $1 будет равна "first"
  • $2 будет равна "second"
  • $3 будет равна "third and more"


Т.к. параметров может быть больше, чем 9, то в скриптах возможно использования специальной директивы shift. Она сдвигает весь набор переменных влево на единицу.

Например, при подаче команды shift один раз наши переменные из примера выше примут такие значения:
  • $1 будет равна "second"
  • $2 будет равна "third and more"
  • $3 - будет пустой


$0

В этом переменной лежит путь и имя скрипта, который запустил пользователь.

Пример 1:
$ ./myscript.sh
$0 = "./myscript.sh"


Пример 2:
$ /usr/home/myscript.sh
$0 = "/home/user/myscript.sh"

Как видите, в $0 совсем не обязательно содержится путь к файлу скрипта.


$#

Количество параметров, переданных скрипту из командной строки.

Пример:
$ ./myscript.sh param1 param2 param3
$# будет равно 3


$?

Код возврата (exit code, result code), с которым завершилась предыдущая команда. Как правило, код возврата "0" означает удачное выполнение команды, а все, что отлично от нуля - различные ошибки, причем коды ошибок четко специфичны для выполняемой команды.

Пример:
#!/bin/sh

ping 192.168.0.5 -c 1 -n -W 1
res=$?

if [ "$res" -eq 0 ]; then
 echo "Хост 192.168.0.5 доступен"
else
 echo "Хост 192.168.0.5 куда-то потерялся"
fi


$$

PID - код процесса, в котором выполняется данный скрипт.

Пример:
#!/bin/sh

pid=$$
echo $pid

Этот скрипт выведет код процесса, с которым выполняется текущий скрипт.


$!

PID последнего процесса, который был запущен в фоне. Например, если Вы запускаете в фоне какой-то процесс, то Вам, возможно, хотелось-бы знать его PID.

Пример:
#!/bin/sh

./another_process &

apid=$!

echo $apid


$*

Все параметры, переданные из командной строки, в одну строку.

Пример:
#!/bin/sh

echo $*

и теперь, выполнив следующий пример мы получим:
$ ./myscript.sh p1 p2 p3
p1 p2 p3
 

Вопросы и ответы

Денис
2020-04-21 16:21:30
добавлю $@ - Все параметры, переданные из командной строки, в виде набора отдельных значений, можно перебирать в цикле: for param in "$@" do echo $param done

Оставить комментарий

ответить