Мне интересно, можно ли написать сценарий оболочки с параметрами, используя getopt
или getopts
, что не позволит объединить несколько параметров?Сценарий оболочки с одним вариантом выбора
Например, мой сценарий может быть побежал в двух возможных режимах - длинные или короткие и с альфа или бета-вариантов, поэтому я хотел бы использовать ./script.sh -l -a
, ./script.sh -l -b
или ./script.sh -s -a
, ./script.sh -s -b
, но это не должно быть возможно запускать оба варианта -l
и -s
или -a
и -b
в то же время.
Я знаю, что это можно сделать намного проще, потому что я могу сделать option -a
, который будет работать long version alpha
, option -b
который будет работать long version beta
, option -c
который будет работать short version alpha
и option -d
, который будет работать short version beta
, но я хочу использовать два варианта , просто поймите, возможен ли такой способ.
Ниже Вы найдете код с «варианты», чтобы выбрать, используя простой read
, что я хочу, чтобы преобразовать в getopt(s)
#!/bin/bash
echo "Please insert the text:"
read text
echo
echo "You entered $text"
echo "Choose version:
1) Long
2) Short
3) Quit
-> "
read option
# OPTION 1
if [ "$option" == "1" ]; then
echo "Choose method:
1) alpha
2) beta"
read method
# METHOD 1
if [ "$method" == "1" ]; then
longalpha
fi
# METHOD 2
if [ "$method" == "2" ]; then
longbeta
fi
fi
#OPTION 2
if [ "$option" == "2" ]; then
echo "Choose method:
1) alpha
2) beta"
read method2
# METHOD 1
if [ "$method2" == "1" ]; then
shortalpha
fi
# METHOD 2
if [ "$method2" == "2" ]; then
shortbeta
fi
fi
if [ "$option" == "3" ]; then
echo "Good Bye!"
fi
Нужно ли присутствовать либо '-l', либо' -s', и должны ли они оба быть первым параметром, если они используются? – Fred
Любой из них должен представлять, и не имеет значения, является ли это первым параметром, который используется или нет. Сценарий не должен работать, пока есть опция '-l' или' -s', там должно быть '-l -a' /' -l -b'/'-s -a' /' -s -b '. Насколько я знаю (я только начинаю свое путешествие с обхода оболочки), 'getopt' или' getopts' запускают отдельные опции в коде один за другим, но я хочу запустить script1, если есть '-l - a', script 2, если есть '-l -b', сценарий 3, если есть' -s -a', скрипт 4, если есть '-s -b' –
@KoahNuttler: имеет значение порядок? '-a -l' недействителен? просто для подтверждения – Inian