Специальные параметры, те параметры которые уже установлены и доступны для пользователя. Эти параметры невозможно назначить внутри скрипта. Список таких параметров:
$1 — $9 — Это так называемые позиционные параметры, служат для передачи аргументов командной строки.
Если аргументов больше 9, то они должны заключаться в фигурные скобки{}
$0 — Имя скрипта который был запущен.
$# — Количество аргументов командной строки или позиционных параметров
$? — Код с которым была завершена предыдущая команда. Если команда была выполнена удачно,
то значение этой переменной будет 0, если же неудачно то не 0.
$$ — Номер процесса под которым исполняется данный скрипт, очень удобно использовать
в имени файла что бы сделать его уникальным.
$! — Номер последнего, запущенного в фоне процесса.
$- Список флагов переданных сценарию. Годиться разве что для проверки интерактивного режима.
$* — Данный параметр содержит в себе все параметры переданные из командной строки.
$@ — То же самое что $*, только каждый параметр представлен отдельно.
$_ — Специальная переменная, содержит последний аргумент предыдущей команды.
И так начнем мы с $1-$9.
Создадим script.sh с таким содержимым:
#!/bin/bash # POS1="$1" POS2="$2" POS3="$3" echo "$1 первый параметр, \$1." echo "$2 второй параметр, \$2." echo "$3 третий параметр, \$3." echo echo "$POS1, $POS2, $POS3 параметры" '$1'"," '$2'"," '$3'","
Запускам script.sh с параметрами a v b:
На экране мы увидим:
v второй параметр, $2.
b третий параметр, $3.
a, v, b параметры $1, $2, $3,
Специальный параметр $0
Создадим script.sh с таким содержимым:
#!/bin/bash # echo "Имя сценария: $0"
Запукаем и получим:
Специальный параметр $#
Создадим script.sh с таким содержимым:
#!/bin/bash # POS1="$1" POS2="$2" POS3="$3" echo "$1 первый параметр, \$1." echo "$2 второй параметр, \$2." echo "$3 третий параметр, \$3." echo echo "Всего параметров: $#"
Запускам script.sh с параметрами a v b:
И получим :
v второй параметр, $2.
b третий параметр, $3.
Всего параметров: 3
Специальный параметр $$
Создадим script.sh с таким содержимым:
#!/bin/bash # TEMFILE=tmp.$$ touch $TEMFILE ls -1 tmp.*
Запускаем скрипт и получаем:
где 20375 уникальный номер процесса.
Специальный параметр $!
Создадим script.sh с таким содержимым:
#!/bin/bash # COM="ps ax" echo "Вывод на экран номера процессов запущенных команд" echo echo -n "Номер процесса ""$COM"": " ${COM} & echo $!
Результатом будет:
Специальный параметр $*
Создадим script.sh с таким содержимым:
#!/bin/bash # POS1="$1" POS2="$2" POS3="$3" echo "$POS1 первый параметр, \$1." echo "$POS2 второй параметр, \$2." echo "$POS3 третий параметр, \$3." echo echo "Все параметры одной строкой: $*"
Запускам script.sh с параметрами a v b:
Результатом будет:
v второй параметр, $2.
b третий параметр, $3.
Все параметры одной строкой: a v b
Специальный параметр $@
Создадим script.sh с таким содержимым:
#!/bin/bash # N=1 for ARG in "$@" do echo "Входной параметр #$N = $ARG" N=$[$N+1] done
Запускаем его:
Результатом будет:
Входной параметр #2 = v
Входной параметр #3 = b
Специальный параметр $?
При помощи данного параметра очень удобно проверить результат выполнения какой либо команды. Пример:
#!/bin/bash # PORT=$1 netstat -ln|grep "$PORT" &> /dev/null if [ $? -eq 0 ]; then echo "$PORT поднят. "'$?'"=$?" else echo "$PORT не поднят. "'$?'"=$?" fi
Запускаем его:
И если Apache поднят на локальном компьютере, то мы увидим:
Давайте попробуем задать какой то порт, который не слушает ни одна программа:
Результат будет:
Специальный параметр $_
Создадим script.sh с таким содержимым:
#!/bin/bash # netstat -ln &> /dev/null echo $_
Запускаем сценарий, и результатом будет:
Часть 1: скрипт Hellow World
Часть 2: Переменные
Часть 3: Специальные параметры
Часть 4: Одинарные и двойные кавычки. Математические операции
Часть 5: Структурные конструкции и команда test
Часть 6: Структура If…then…else
Часть 7: Подмножества и части строк. Размеры