Linux 如何添加一个命令,将任何值放在参数上,以回显无效输入

Linux 如何添加一个命令,将任何值放在参数上,以回显无效输入,linux,if-statement,menu,arguments,Linux,If Statement,Menu,Arguments,我必须保留“是”和“否”选项,但我想输入一些东西,如果我不键入“是”或“否”,以表明这是不可能的,我对此一无所知,不知道该怎么办 echo "Do you wish to Exit?(yes/no)" read input if [ "$input" == "yes" ] then clear exit elif [ "$input" == "no" ] then clear echo &qu

我必须保留“是”和“否”选项,但我想输入一些东西,如果我不键入“是”或“否”,以表明这是不可能的,我对此一无所知,不知道该怎么办

echo "Do you wish to Exit?(yes/no)"
read input
if [ "$input" == "yes" ]
then
clear
exit
elif [ "$input" == "no" ]
then 
clear 
echo "Reloaded"
echo -e "\n"
elif [ "$input" == * ]
then
echo "Invalid Input"
fi ;;

您在这里的轨道是正确的,但最后一次条件检查导致了问题

您正在检查最后一个块中的“$input”=*”是否正确。当你像那样单独使用
*
时,你会得到一些古怪的行为。shell尝试将其扩展到当前目录中的所有文件。这意味着您可能会为条件提供过多的参数,并且当当前目录中有多个文件时,将出现类似于
[:过多参数
的错误。如果目录除给定脚本外为空,则条件将扩展为
elif[“$input”==some_file.txt]
,脚本将继续并正常退出,无需所需输出。请参阅bash和文档

这里最简单的解决方案是使用
else
替代。如果前两个条件不满足,则将执行此块,因此
$inputs
不是“是”或“否”。请参阅文档。脚本应如下所示:

echo“您想退出吗?(是/否)”
读取输入
如果[“$input”==“是”]
然后
清楚的
出口
elif[“$input”==“否”]
然后
清楚的
回声“重新加载”
echo-e“\n”
其他的
回显“无效输入”
fi
最后,您可以利用
-p
参数将
read
命令简化为一行,用法如下:

-p prompt在尝试读取之前,输出不带尾随换行符的字符串提示符


因此,您可以将读取压缩为
read-p'是否要退出?(是/否)'输入

非常感谢您的重播。在搜索了如此简单的内容30分钟后,我设法解决了这个问题。因此,如果我只是用-p替换读取,什么都不会改变?我的意思是只是简化它,对吗?@antoniscy是的!工作流程或功能没有改变,只是稍微简洁一点