Linux shell脚本,检查用户输入

时间:2015-04-01 15:54:10

标签: linux shell

所以我正在制作一个简单的bash shell脚本计算器,我遇到了麻烦。

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

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

echo "Enter + or - "
read input2
if [ $input2 = "+" ] then
    echo "You entered $input2"

不起作用。那么我应该为基本操作员阅读什么呢?

编辑:正在使用Bash shell

4 个答案:

答案 0 :(得分:1)

在bash中,then之前需要使用分号或换行符。

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

if [ "$input" = '+' ] ; then

您还可以切换到不需要引用参数的[[ ... ]]条件:

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

你必须在右侧引用*,否则它被解释为通配符模式,意思是"任何"。

答案 1 :(得分:0)

尝试if语句,如:

if [ $input = "+" ]

答案 2 :(得分:0)

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

#!/bin/bash

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

输出:

Enter + or - 
+
You entered +

在输入过程中,您也可以打印带有读取的内容。

read -p "Enter + or - " input2

答案 3 :(得分:0)

一种简单的方法是使用bash case语句,而不是使用此计算器脚本的条件。

#!/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否则它将默认打印“无效输入”。

您可以在此处阅读有关案例陈述的更多信息http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html