English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Передача параметров в Shell

Мы можем передавать параметры скрипту при выполнении 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