2つの引数の後、各引数の先頭は-*と同じではありません。
for args in "$@"
do
if [[ ${@: 2} != -* ]]; then
case "$args" in
-q)
if [ ! -z "$2" ]; then
echo "$2"
shift
fi
shift
;;
-w)
if [ ! -z "$2" ]; then
echo "$2"
shift
fi
shift
;;
-e)
if [ ! -z "$2" ]; then
echo "$2"
shift
fi
shift
;;
esac
else
echo "arguments start with '-'"
fi
done
-q s d f g h
最初のパラメータにのみ適用されます。
-q -v -b -n -m -n
そして-q -l j u -y d
間違った
最初のパラメーターの後、残りのパラメーターは「-」文字で始まってはいけません。
if [ ! -z "$2" ];
- パラメータが空であることを確認する
答え1
ダッシュで始まる最初のパラメータ以外のパラメータがないことを確認したいようです。
次のことができます。
#!/bin/bash
if [[ $1 != -* ]]; then
printf '1st argument, "%s", does not start with a dash\n' "$1"
exit 1
fi >&2
arg1=$1
shift
for arg do
if [[ $arg == -* ]]; then
printf 'Argument "%s" starts with a dash\n' "$arg"
exit 1
fi
done >&2
echo 'All arguments ok'
printf 'arg 1 = "%s"\n' "$arg1"
printf 'other arg = "%s"\n' "$@"
最初のパラメータを明示的に作成する必要がある場合は、-q
最初のテストを次から変更してください。
[[ $1 != -* ]]
到着
[[ $1 != -q ]]