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

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

134 голоса | спросил Paul 11 FebruaryEurope/MoscowbSat, 11 Feb 2012 01:16:16 +0400000000amSat, 11 Feb 2012 01:16:16 +040012 2012, 01:16:16

7 ответов


125

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

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

ответил Bruce Ediger 11 FebruaryEurope/MoscowbSat, 11 Feb 2012 01:55:25 +0400000000amSat, 11 Feb 2012 01:55:25 +040012 2012, 01:55:25
102

Вы можете получить доступ к переданным аргументам с помощью $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
ответил Kevin 11 FebruaryEurope/MoscowbSat, 11 Feb 2012 01:24:26 +0400000000amSat, 11 Feb 2012 01:24:26 +040012 2012, 01:24:26
19
$/shellscriptname.sh argument1 argument2 argument3 

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

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

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

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

ответил Balaswamy vaddeman 11 FebruaryEurope/MoscowbSat, 11 Feb 2012 09:07:57 +0400000000amSat, 11 Feb 2012 09:07:57 +040012 2012, 09:07:57
9
./myscript myargument

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

ответил vimdude 11 FebruaryEurope/MoscowbSat, 11 Feb 2012 01:21:44 +0400000000amSat, 11 Feb 2012 01:21:44 +040012 2012, 01:21:44
9

Форма

$ ./script.sh "[email protected]" 

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

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

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

ответил user400344 15 J000000Friday16 2016, 12:21:01
3

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

cat << 'EOF' > test
echo "First arg: $1"
echo "Second arg: $2"
echo "List of all arg: [email protected]"
EOF
sh test hello world

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

ответил FireInTheSky 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 20 Sep 2017 16:12:26 +0300 2017, 16:12:26
-1

Если вы знакомы с Python argparse и не против вызова python для анализа аргументов bash, используйте bash argparse ( https://github.com/mattbryson/bash-arg-parse ),

См. такой же ответ здесь: https: //stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287

ответил Linh 4 Maypm18 2018, 21:32:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132