Linux 如何确保用户输入有效的开关盒选项?

Linux 如何确保用户输入有效的开关盒选项?,linux,shell,switch-statement,sh,Linux,Shell,Switch Statement,Sh,我正在试图找出如何修复此代码 echo -n "Enter you complaint : "; read complaint; if [[ -z $complaint ]] || [[ $complaint != 'FIRE' ]] || [[ $complaint != 'INTOXICATION' ]] || [[ $complaint != "INJURY" ]] || [[ $complaint != "BREAKAGE" ]] ;then echo "Not a good

我正在试图找出如何修复此代码

echo -n "Enter you complaint : ";
read complaint;


if [[ -z $complaint ]] || [[ $complaint != 'FIRE' ]] || [[ $complaint != 'INTOXICATION' ]] || [[ $complaint != "INJURY" ]] || [[ $complaint != "BREAKAGE" ]] ;then
    echo "Not a good option";
    exit 1;
fi


case $complaint in
    FIRE)  = $complaint=$(echo "FIRE");;
    INTOXICATION) = $complaint=$(echo "INTOXICATION");;
    INJURY) = $complaint=$(echo "INJURY");;
    BREAKAGE) = $complaint=$(echo "BREAKAGE");;
esac
是否可能知道:
为什么即使我输入了一个有效的东西,它也总是输入if?

如果
中的条件是错误的,它应该是:

if [[ -z $complaint ]] || [[ ( $complaint != 'FIRE' && $complaint != 'INTOXICATION' && $complaint != "BRIS" && $complaint != "BOBO" ) ]] ;then
也就是说,如果
如果
$complaint
null
-z$complaint
),或者如果它与任何有效选项都不匹配,那么它必须同时与所有选项不同,因此
&
而不是
|

或者,也可以在块中使用默认条件:


中的条件如果不正确,则应为:

if [[ -z $complaint ]] || [[ ( $complaint != 'FIRE' && $complaint != 'INTOXICATION' && $complaint != "BRIS" && $complaint != "BOBO" ) ]] ;then
也就是说,如果
如果
$complaint
null
-z$complaint
),或者如果它与任何有效选项都不匹配,那么它必须同时与所有选项不同,因此
&
而不是
|

或者,也可以在块中使用默认条件:


如果字符串是
,则它不是
中毒
。如果是
中毒
,则不是
火灾
。如果它是其他东西,那么它就不是
。(这两个选项中的一个总是正确的。)好的,但是,我如何确保用户键入的是有效的thing switch case选项?您必须测试否定:
cond1&&cond2&&…
什么是
$(echo“FIRE”)
实现了
的“FIRE”
除了在没有回声的情况下不起作用外,没有其他作用。这只是一个好奇的问题,所以我做了一个很快的例子,但是,是的,这对我来说是一件非常愚蠢的事情。如果字符串是
,那么它就不是
醉酒
。如果是
中毒
,则不是
火灾
。如果它是其他东西,那么它就不是
。(这两个选项中的一个总是正确的。)好的,但是,我如何确保用户键入的是有效的thing switch case选项?您必须测试否定:
cond1&&cond2&&…
什么是
$(echo“FIRE”)
实现了
的“FIRE”
不起作用,除非你没有
echo
?这只是一个好奇的问题,所以我很快就做了这个例子,但是,是的,这对我来说是一件非常愚蠢的事情。谢谢你!但是你知道我第二个问题的答案吗?@PostMaloneM3m3r-Ups,对不起,我没看到那部分。我不熟悉
awk
思想。也许你可以从
whoami
date
hostname-I
获得你需要的字段。谢谢你!但是你知道我第二个问题的答案吗?@PostMaloneM3m3r-Ups,对不起,我没看到那部分。我不熟悉
awk
思想。也许您可以从
whoami
date
hostname-I
获取所需的字段。