Как написать скрипты оболочки Unix с параметрами?
Я не знаю, возможно ли это, но я хочу написать сценарии оболочки, которые действуют как обычные исполняемые файлы с параметрами. В качестве очень простого примера рассмотрим сценарий оболочки foo.sh, который настроен на выполнение:
./foo.sh
./foo.sh -o
и код foo.sh
работает как
#!/bin/sh
if ## option -o is turned on
## do something
else
## do something different
endif
Возможно ли и как это сделать? Благодарю.
Ответы
Ответ 1
$ cat stack.sh
#!/bin/sh
if [[ $1 = "-o" ]]; then
echo "Option -o turned on"
else
echo "You did not use option -o"
fi
$ bash stack.sh -o
Option -o turned on
$ bash stack.sh
You did not use option -o
FYI:
$1 = First positional parameter
$2 = Second positional parameter
.. = ..
$n = n th positional parameter
Для более опрятных/гибких опций читайте эту другую ветку: Использование getopts для обработки длинных и коротких опций командной строки
Ответ 2
это способ, как это сделать в одном скрипте:
#!/usr/bin/sh
#
# Examlple of using options in scripts
#
if [ $# -eq 0 ]
then
echo "Missing options!"
echo "(run $0 -h for help)"
echo ""
exit 0
fi
ECHO="false"
while getopts "he" OPTION; do
case $OPTION in
e)
ECHO="true"
;;
h)
echo "Usage:"
echo "args.sh -h "
echo "args.sh -e "
echo ""
echo " -e to execute echo \"hello world\""
echo " -h help (this output)"
exit 0
;;
esac
done
if [ $ECHO = "true" ]
then
echo "Hello world";
fi
щелкните здесь для получения источника
Ответ 3
Да, вы можете использовать встроенные средства getopts
или автономный getopt
для этой цели.
Ответ 4
Вы можете перебирать аргументы и читать параметры в любом порядке. Вот пример. Для скрипта, использующего этот код, см. Пример сценария
#Example
OPTION_1=""
option_array[0]="1"
option_array[1]="2"
options="[email protected]"
set_options(){
prev_option=""
for option in $options;
do
case $prev_option in
"-t" )
OPTION_1=$option
;;
"-d" )
option_array+=("$option")
;;
"-g" )
option_array_2+=("$option")
;;
esac
prev_option="$option"
done
}
function test()
{
set_options
echo $OPTION_1
echo ${option_array[*]}
echo ${option_array_2[*]}
}
test