问答详情
源自:4-2 shell多分支if语句例:计算器

请问这个是哪里有错误

https://img4.mukewang.com/5d3e953b0001e01303320577.jpg运行时一直提示请输入数字

提问者:qq_慕斯2366313 2019-07-29 14:43

个回答

  • 星光如此灿烂
    2019-07-30 15:31:53

    这样看代码看不到你说的问题,你应该把报错也贴上的。

    暂时看见有几个问题:

    1. -n 与“num1” 中间要有空格。

    2. == 两边要有空格

    3. [ xxx ]  方括号里的判断要跟两个方括号之间有空格

    4. 除法那行不要带双引号

    5. 最后一行只要在两边加双引号就够了,不要写那么多双引号

    可能还有漏看的。。。

    下面是我写的拆解过if结构的

    #!/bin/bash
    # 例子:计算器
    read -t 30 -p "input num1:" num1
    read -t 30 -p "input num2:" num2
    read -t 30 -p "input ope(+-*/):" ope
    if [ -n "$num1" -a  -n "$num2" -a -n "$ope" ]
    then
        test1=$(echo $num1 | sed 's/[0-9]//g')
        test2=$(echo $num2 | sed 's/[0-9]//g')
        if [ -z "$test1" -a -z "$test2" ]        
        then
            echo "check ok "        
        else                
            echo "error input"                
            exit 10        
        fi
    else        
        echo "num1,num2,ope must be not null"        
        exit 11
    fi
    
    # 开始计算
    if [ "$ope" == "+" ]
    then        
        res=$(($num1+$num2))
    elif [ "$ope" == "-" ]
    then        
        res=$(($num1-$num2))
    elif [ "$ope" == "*" ]
    then        
        res=$(($num1*$num2))
    elif [ "$ope" == "/" ]
    then        
        res=$(($num1/$num2))
    else        
        echo "ope error"
    fi
    echo "res:$res"