测试似乎无法正常工作。为什么? 我需要一个脚本,它接受第一个参数,检查它是什么字母并完成工作。如果字母是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
答案 0 :(得分:4)
让我们举一个更简单的例子:[[ $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