Как передать аргумент командной строки в сценарий оболочки?

Я знаю, что сценарии оболочки просто запускают команды, как если бы они были выполнены в командной строке. Я хотел бы иметь возможность запускать сценарии оболочки, как если бы они были функциями … То есть, вводя значение ввода или строку в скрипт. Как я могу это сделать?

Команда оболочки и любые аргументы этой команды отображаются в виде нумерованных переменных оболочки: $0 имеет строковое значение самой команды, например script , ./script , /home/user/bin/script или что-то еще. Любые аргументы отображаются как "$1" , "$2" , "$3" и т. Д. Количество аргументов в переменной оболочки "$#" .

Обычные способы борьбы с этим включают команды оболочки getopts и shift . getopts очень похож на библиотечную функцию C getopt() . shift перемещает значение от $2 до $1 , $3 до $2 и т. д .; $# уменьшается. Код заканчивается, глядя на значение "$1" , делая вещи, используя caseesac чтобы принять решение о действии, а затем сделать shift чтобы переместить $1 в следующий аргумент. Это только когда-либо нужно изучить $1 , а может быть $# .

Вы можете получить доступ к переданным аргументам с помощью $n где n – номер аргумента – 1, 2, 3, ... Вы передаете аргументы так же, как и с любой другой командой.

 $ cat myscript #!/bin/bash echo "First arg: $1" echo "Second arg: $2" $ ./myscript hello world First arg: hello Second arg: world 
 $/shellscriptname.sh argument1 argument2 argument3 

Вы также можете передать вывод одного сценария оболочки в качестве аргумента в другой сценарий оболочки.

 $/shellscriptname.sh "$(secondshellscriptname.sh)" 

Внутри сценария оболочки вы можете получить доступ к аргументам с номерами, такими как $1 для первого аргумента, и $2 для второго аргумента и так далее.

Подробнее о аргументах оболочки

 ./myscript myargument 

myargument становится $1 внутри myscript .

Форма

 $ ./script.sh "$@" 

является наиболее удобным для argv . Разделитель arg – это пробел, но его можно изменить. Не помните, как он не работает. Затем используйте

  $1, $2, shift, if [ $# -ne 3 ] 

для управления потоком. Обычно я не обнимаюсь, если достаточно case ... esac .

В сценарии оболочки; он становится именем переменной $ 1. Второе слово становится именем переменной $ 2 и т. Д.

 cat <<EOF> myscript echo "First arg: $1" echo "Second arg: $2" echo "List of all arg: $@" EOF sh myscript hello world 

Более подробно можно найти в руководстве оболочки (sh) по адресу http://heirloom.sourceforge.net/sh/sh.1.html