Вы можете использовать case
:
case "$1" in
tst) echo "Backing up Test style" ;;
prd)
echo "Production backup"
/etc/init.d/myservice stop
tar czf ...
/etc/init.d/myservice start
;;
qa) echo "Quality skipped" ;;
rpt)
echo "Different type of backup"
echo "This could be another processing"
...
;;
*)
echo "Unknown backup type"
exit 2
;;
esac
Обратите внимание на двойной ;;
, чтобы завершить каждый случай, и удобное использование сопоставления с образцом .
Отредактируйте: следуя вашему комментарию и предложению @CharlesDuffy, если вы хотите иметь все допустимые параметры в массиве и проверить свое значение по любым из них (следовательно, иметь один и тот же кусок кода для все допустимые значения), вы можете использовать ассоциативный массив :
declare -A valids=(["tst"]=1 ["prd"]=1 ["qa"]=1 ["rpt"]=1)
if [[ -z ${valids[$1]} ]] ; then
echo "Invalid parameter value"
# Any other processing here ...
exit 1
fi
# Here your parameter is valid, proceed with processing ...
Это работает при наличии значения (здесь 1
, но это может быть что-то еще в этом случае), присвоенного каждый допустимый параметр.Таким образом, любой недопустимый параметр будет нулевым, и сработает тест -z
.
Кредиты перейдут к нему.