Программирование в Bash
Bash учебное пособие. Часть 3: Специальные параметры
Специальные параметры, те параметры которые уже установлены и доступны для пользователя. Эти параметры невозможно назначить внутри скрипта. Список таких параметров:
$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:
./script.sh a v b
На экране мы увидим:
a первый параметр, $1. v второй параметр, $2. b третий параметр, $3.
a, v, b параметры $1, $2, $3,
Специальный параметр $0
Создадим script.sh с таким содержимым:
#!/bin/bash # echo "Имя сценария: $0"
Запукаем и получим:
script.sh
Специальный параметр $#
Создадим 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:
./script.sh a v b
И получим :
a первый параметр, $1. v второй параметр, $2. b третий параметр, $3. Всего параметров: 3
Специальный параметр $$
Создадим script.sh с таким содержимым:
#!/bin/bash # TEMFILE=tmp.$$ touch $TEMFILE ls -1 tmp.*
Запускаем скрипт и получаем:
tmp.20375
где 20375 уникальный номер процесса.
Специальный параметр $!
Создадим script.sh с таким содержимым:
#!/bin/bash # COM="ps ax" echo "Вывод на экран номера процессов запущенных команд" echo echo -n "Номер процесса ""$COM"": " ${COM} & echo $!
Результатом будет:
Номер процесса ps ax: 20478
Специальный параметр $*
Создадим 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:
./script.sh a v b
Результатом будет:
a первый параметр, $1. v второй параметр, $2. b третий параметр, $3.
Все параметры одной строкой: a v b
Специальный параметр $@
Создадим script.sh с таким содержимым:
#!/bin/bash # N=1 for ARG in "$@" do echo "Входной параметр #$N = $ARG" N=$[$N+1] done
Запускаем его:
./script.sh a v b
Результатом будет:
Входной параметр #1 = a Входной параметр #2 = v Входной параметр #3 = b
Специальный параметр $?
При помощи данного параметра очень удобно проверить результат выполнения какой либо команды. Пример:
#!/bin/bash # PORT=$1 netstat -ln|grep "$PORT" &> /dev/null if [ $? -eq 0 ]; then echo "$PORT поднят. "'$?'"=$?" else echo "$PORT не поднят. "'$?'"=$?" fi
Запускаем его:
./script.sh :80
И если Apache поднят на локальном компьютере, то мы увидим:
:80 поднят. $?=0
Давайте попробуем задать какой то порт, который не слушает ни одна программа:
./script.sh :60000
Результат будет:
:60000 не поднят. $?=1
Специальный параметр $_
Создадим script.sh с таким содержимым:
#!/bin/bash # netstat -ln &> /dev/null echo $_
Запускаем сценарий, и результатом будет:
-ln
ИСТОЧНИКИ:
- Программирование в BASH
- Структура If…then…else
- Взаимодействие bash-скриптов с пользователем
- пользовательские диалоги
- библиотека ncurses
- Защита от Ddos
- http - запросы
- утилита tput
- все по bash
- wiptail
- Zenity - графический интерфейс для командной строки
- Утилита dialog для использования диалоговых окон в shell-скриптах
- Разработка простых интерфейсов с помощью dialog/Xdialog
- Статья об утилите создания диалогов в скриптах Dialog