При запуске скрипта ему можно передать некоторые аргументы из командной строки. Внутри скрипта эти аргументы доступны через номера аргументов. Например, первый аргмуент доступен через
$1
, второй аргумент через - $2
и так далее. Также есть специальный идентификатор - $0, который всегда хранит имя скрипта.
Например, определим следующий скрипт hello:
#!/bin/bash echo $0 exit 0
В данном случае выводим на консоль имя скрипта. Запустим скрипт:
eugene@Eugene:~$ bash hello hello eugene@Eugene:~$
Теперь передадим в скрипт аргумент и используем его. Для этого изменим скрипт следующим образом:
#!/bin/bash # скрипт принимает аргумент и выводит его на консоль echo $1 exit 0
В данном случае мы выводим самый первый аргумент на консоль с помощью идентификатора $1
. Запустим скрипт, передав ему аргумент:
eugene@Eugene:~$ bash hello Tom Tom eugene@Eugene:~$
Аргументы указываются после имени скрипта через пробел. В частности, здесь передается только один аргумент - "Tom". Если надо передать в качестве аргумента строку, где слова разделены пробелами, то такая строка оборачивается в кавычки:
eugene@Eugene:~$ bash hello "Hello METANIT.COM" Hello METANIT.COM eugene@Eugene:~$
Подобным образом можно передать и большее количество аргументов. Например:
#!/bin/bash # скрипт принимает аргументы и выводит их на консоль ARG1=$1 ARG2=$2 ARG3=$3 SCRIPTNAME=$0 echo The name of this script is $SCRIPTNAME echo The first argument is $ARG1 echo The second argument is $ARG2 echo The third argument is $ARG3 exit 0
В данном случае передаем три аргумента. Протестируем скрипт:
eugene@Eugene:~$ bash hello Tom 39 tom@mimimail.com The name of this script is hello The first argument is Tom The second argument is 39 The third argument is tom@mimimail.com eugene@Eugene:~$
Кроме $0
внутри скрипта можно использовать еще ряд специальных идентификаторов:
$#
: число аргументов
$@
и $*
: строка с аргументами
Используем данные идентификаторы в скрипте:
#!/bin/bash echo the number of arguments is $# echo the arguments are $@ echo the arguments are $* exit 0
Вызовем скрипт:
eugene@Eugene:~$ bash hello a b c the number of arguments is 3 the arguments are a b c the arguments are a b c eugene@Eugene:~$