Таким образом, единственное изменение, которое вам нужно сделать, - это заменить оператор ((...))
на оператор [[ ... ]]
, как предложил @Nahuel Fouilleul, и добавить $
в переменные назначения. Однако их предложение не сработало для вас, потому что пункт назначения был написан неправильно. У меня есть обновленный код, показанный ниже.
#!/bin/bash
usage() { echo "Usage: $0 [-m < local|remote>]" 1>&2; exit 1; }
while getopts "m:" o; do
case "${o}" in
m)
destination=${OPTARG}
[[ $destination == "local" || $destination == "remote" ]] || usage
;;
*)
usage
;;
esac
done
shift "$(( OPTIND-1 ))"
echo $destination
Однако вам не нужно проверять эту информацию в операторе switch, вы можете проверить основную часть своего кода и убедиться, что пункт назначения было установлено с использованием расширения параметров, как я показываю здесь:
...
m)
destination=${OPTARG}
;;
...
[[ ${destination:?A destination is required.} == "local" || ${destination} == "remote" ]] || usage
echo $destination