我要求用户输入2个数字和s表示总和,或“p”表示产品。 当我运行脚本时,我没有看到任何结果 这是我的剧本
#!/bin/bash
read -p "please enter two integers, s or p to calculate sum or product of this numbers: " num1 num2 result
if [ result == "s" ]
then
echo "num1+num2" | bc
elif [ result == "p" ]
then
echo $((num1*num2))
fi
答案 0 :(得分:3)
您正在比较字符串result
,而不是变量result
的值。
if [ "$result" = s ]; then
echo "$(($num1 + $num2))"
elif [ "$result" = p ]; then
echo "$(($num1 * $num2))"
fi
在$((...))
内,您可以省略前导$
,因为假定字符串是要取消引用的变量名称。
如果您打算将输入限制为整数,则没有理由使用bc
。
答案 1 :(得分:1)
补充chepner's helpful answer,这解释了问题中代码的问题,以及DRY [1] 启发的解决方案 :
# Prompt the user.
prompt='please enter two integers, s or p to calculate sum or product of this numbers: '
read -p "$prompt" num1 num2 opChar
# Map the operator char. onto an operator symbol.
# In Bash v4+, consider using an associative array for this mapping.
case $opChar in
'p')
opSymbol='*'
;;
's')
opSymbol='+'
;;
*)
echo "Unknown operator char: $opChar" >&2; exit 1
;;
esac
# Perform the calculation.
# Note how the variable containing the *operator* symbol
# *must* be $-prefixed - unlike the *operand* variables.
echo $(( num1 $opSymbol num2 ))
[1]除read
的{{1}}选项外,该解决方案符合POSIX标准;但是,它也适用于-p
,它主要是一个POSIX功能的shell。