Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux shell脚本,检查用户输入_Linux_Shell - Fatal编程技术网

Linux shell脚本,检查用户输入

Linux shell脚本,检查用户输入,linux,shell,Linux,Shell,因此,我正在制作一个简单的bashshell脚本计算器,我遇到了一个障碍 我似乎无法确定用户是否输入了+或-或/或* 我不确定我应该写什么。我知道 echo "Enter + or - " read input2 if [ $input2 = "+" ] then echo "You entered $input2" 不起作用。那么,对于基本运算符,我应该读些什么呢 编辑:Bash shell正在Bash中使用,在之前需要分号或换行符,然后 双引号变量以防止可能导致语法错误的扩展: i

因此,我正在制作一个简单的bashshell脚本计算器,我遇到了一个障碍

我似乎无法确定用户是否输入了+或-或/或*

我不确定我应该写什么。我知道

echo "Enter + or - "
read input2
if [ $input2 = "+" ] then
    echo "You entered $input2"
不起作用。那么,对于基本运算符,我应该读些什么呢


编辑:Bash shell正在Bash中使用

,在
之前需要分号或换行符,然后

双引号变量以防止可能导致语法错误的扩展:

if [ "$input" = '+' ] ; then
您还可以切换到不需要引用参数的
[…]
条件:

if [[ $input = + ]] ; then
    echo You entered +
fi

不过,您必须在右侧引用
*
,否则它会被解释为通配符模式,意思是“任何东西”。

请尝试下面的if语句:

if [ $input = "+" ]

您遇到了一些严重的语法问题。这里有一个精致的:

#!/bin/bash

echo "Enter + or - "
read input2
if [ "$input2" = "+" ]; then
    echo "You entered $input2"
fi
输出:

Enter + or - 
+
You entered +
在输入过程中,您也可以使用read打印某些内容

read -p "Enter + or - " input2

对于这个计算器脚本,一个简单的方法是使用bash case语句,而不是if条件

#!/bin/bash
echo "Enter + or - or * or /"
read input2
case $input2 in
'+' )
echo "You entered $input2" ;;
'-' )
echo "You entered $input2" ;;
'*' )
echo "You entered $input2" ;;
'/' )
echo "You entered $input2" ;;
* )
echo "Invalid input"
;;
esac
请注意大小写“*”和最后一个大小写*(不带单引号)之间的区别。第一个将与“*”符号字面匹配,但最后一个(不带单引号)表示通配符。最后一个选项是一个通配符,用于捕获与我们正在查找的任何情况都不匹配的所有无效输入

上面的脚本也可以修改为更短

echo "Enter + or - or * or /"
read input2
case $input2 in
'+'|'-' |'*' |'/' )
echo "You entered $input2" ;;
* )
echo "Invalid input"
;;
esac
在这里,它将在单个案例中查找“+”或“-”或“*”或“/”,并打印$input2,否则它将默认打印“无效输入”


您可以在此处阅读有关案例陈述的更多信息

请确保引用您的变量。否则,
*
将扩展为文件名通配符。您使用什么shell?请发布实际的脚本示例。很难说你做错了什么。我甚至不确定你的问题中是否使用了反勾号作为SO标记,或者因为这是你在脚本中实际使用的标记。请尝试-eq而不是=尝试在
之前添加分号,然后