测试似乎无法正常工作。为什么?我需要一个脚本,它接受第一个参数,检查它是哪个字母并完成工作。如果字母是a,b,c或d,它就会退出,否则会正确。
letter=$1
[[ $letter != a || $letter != b || $letter != c || $letter != d ]] && echo exiting && exit 1
if [[ $letter == a ]]
then
echo correct
fi
让我们举一个更简单的例子:[[ $letter != a || $letter != b ]]
不管letter
是什么,这两个测试中的一个都是真的。如果选择a
,则$letter != b
.如果选择b
,则$letter != a
。如果你选择任何其他字符,两者都是正确的。
您需要&&
:
[[ $letter != a && $letter != b && $letter != c && $letter !=d ]] && { echo exiting; exit 1; }.
或使用=
/==
并在测试后使用||
。
[[ $letter = a || $letter = b || $letter = c || $letter = d ]] || { echo exiting; exit 1; }
(在这两种情况下,首选显式if
语句,而不是使用 &&
或 ||
:
if [[ $letter != a && $letter != b ... ]]; then
echo exiting >&2 # use standard error, not standard output
exit 1
fi
if ! [[ $letter = a || $letter = b ... ]]; then
echo exiting >&2 # use standard error, not standard output
exit 1
fi
(
不过,更简单的是使用 case
语句:
case $letter in
a|b|c|d) : ;; # do nothing
*) echo exiting
exit 1
;;
esac