Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

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

Практика



В 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
 
создано: 2017-05-10
обновлено: 2021-03-13
868



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии

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

Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Операционная система LINUX

Термины: Операционная система LINUX