English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Мы можем передавать параметры скрипту при выполнении Shell-скрипта, и формат получения параметров в скрипте:$n.n представляет собой цифру, 1 - это первый параметр, переданный для выполнения скрипта, 2 - это второй параметр, и так далее...
В следующем примере мы передаем скрипту три параметра и выводим их, где $0 Имя выполняемого файла (включая путь к файлу):
#!/bin/bash # author:Основной учебник # url:ru.oldtoolbag.com echo "Пример передачи параметров в Shell!"; echo "Имя выполняемого файла: $0"; echo "Первый параметр: $1"; echo "Второй параметр: $2"; echo "Третий параметр: $3";
Установка прав выполнения для скрипта и выполнение скрипта, результат выводится следующим образом:
$ chmod +x test.sh $ ./test.sh 1 2 3 Пример передачи параметров в Shell! Имя выполняемого файла: ./test.sh Первый параметр: 1 Второй параметр: 2 Третий параметр: 3
Кроме того, есть несколько специальных символов для обработки параметров:
Обработка параметров | Описание |
---|---|
$# | Количество переданных скрипту параметров |
$* | Выводит все переданные скрипту параметры в виде одной строки. Если "$*" заключен в кавычки, выводится в виде "$1 $2 … $n" всех параметров. |
$$ | ID текущего процесса выполнения скрипта |
$! | ID последнего процесса, выполняемого в фоновом режиме |
$@ | Как и $*, но при использовании добавляются кавычки, и каждый параметр возвращается в кавычках. Если "$@" заключен в кавычки, выводится в виде "$1" "$2" … "$n" всех параметров. |
$- | Показывает текущие параметры, используемые Shell, иКоманда setФункции идентичны. |
$? | Показывает состояние завершения последней команды. 0 означает отсутствие ошибок, другие значения указывают на наличие ошибок. |
#!/bin/bash # author:Основной учебник # url:ru.oldtoolbag.com echo "Пример передачи параметров в Shell!"; echo "Первый параметр: $1"; echo "Количество параметров: $#"; echo "Параметры передаются как строка: $*";
Выполнение скрипта, результат вывода показан ниже:
$ chmod +x test.sh $ ./test.sh 1 2 3 Пример передачи параметров в Shell! Первый параметр: 1 Количество параметров: 3 Параметры передаются как строка: 1 2 3
Разница между $* и $@:
Подобия: оба указывают на все параметры.
Различия: только в двойных кавычках проявляются. Предположим, что при выполнении скрипта были указаны три параметра 1, 2, 3, то "*" эквивалентно "1 2 3" (передан один параметр), а "@" эквивалентно "1" "2" "3" (переданы три параметра).
#!/bin/bash # author:Основной учебник # url:ru.oldtoolbag.com echo "-- \$* демонстрация ---" for i in "$*"; do echo $i done echo "-- \$@ демонстрация ---" for i in "$@"; do echo $i done
Выполнение скрипта, результат вывода показан ниже:
$ chmod +x test.sh $ ./test.sh 1 2 3 -- $* демонстрация --- 1 2 3 -- $@ демонстрация --- 1 2 3