Linux特殊shell意义问题
我如何使这段代码工作,使“*”和mod“%”相乘不会得到错误消息?我想是因为它们对贝壳有着特殊的意义。我怎么才能把它拿走Linux特殊shell意义问题,linux,bash,shell,Linux,Bash,Shell,我如何使这段代码工作,使“*”和mod“%”相乘不会得到错误消息?我想是因为它们对贝壳有着特殊的意义。我怎么才能把它拿走 #!/bin/bash echo "Enter Number Operator Number" echo "[Operators +, -, /, *, %]" echo -n " ---> " read num1 op num2 case $op in +) printf "$num1 + $num2 = %d\n" `expr $num1 $op $
#!/bin/bash
echo "Enter Number Operator Number"
echo "[Operators +, -, /, *, %]"
echo -n " ---> "
read num1 op num2
case $op in
+) printf "$num1 + $num2 = %d\n" `expr $num1 $op $num2`
;;
-) printf "$num1 - $num2 = %d\n" `expr $num1 $op $num2`
;;
/) printf "$num1 / $num2 = %d\n" `expr $num1 $op $num2`
;;
\*) printf "$num1 * $num2 = %d\n" `expr $num1 $op $num2`
;;
%) printf "$num1 % $num2 = %d\n" `expr $num1 $op $num2`
;;
*) echo "Bad Operator: $op choose [+, -, *, /, %]"
;;
esac
你应该总是引用你的变量,除非你特别想让它们进行分词和全局搜索
case "$op" in
+) printf "$num1 + $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
-) printf "$num1 - $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
/) printf "$num1 / $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
\*) printf "$num1 * $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
%) printf "$num1 % $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
*) echo "Bad Operator: $op choose [+, -, *, /, %]"
;;
esac
你应该总是引用你的变量,除非你特别想让它们进行分词和全局搜索
case "$op" in
+) printf "$num1 + $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
-) printf "$num1 - $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
/) printf "$num1 / $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
\*) printf "$num1 * $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
%) printf "$num1 % $num2 = %d\n" `expr "$num1" "$op" "$num2"`
;;
*) echo "Bad Operator: $op choose [+, -, *, /, %]"
;;
esac
最简单的方法是使用
(())
运算符
你的台词应该是这样的:
printf "$num1 + $num2 = %d\n" $(( expr $num1 $op $num2 ))
而且您不会对未加引号的变量有任何问题。:) 最简单的方法是使用
(())
运算符
你的台词应该是这样的:
printf "$num1 + $num2 = %d\n" $(( expr $num1 $op $num2 ))
而且您不会对未加引号的变量有任何问题。:) 由于使用$(())
进行算术扩展,您的整个脚本可以简化为:
#!/bin/bash
echo "Enter Number Operator Number"
echo "[Operators +, -, /, *, %]"
echo -n " ---> "
read num1 op num2
case "$op" in
+|-|\*|/|%) echo "$num1 $op $num2 =" $((num1 $op num2)) ;;
*) echo "Bad Operator: $op choose [+, -, *, /, %]" ;;
esac
您可以在man bash
的算术扩展部分中阅读更多关于这方面的内容。由于使用$(())
进行算术扩展,您的整个脚本可以简化为:
#!/bin/bash
echo "Enter Number Operator Number"
echo "[Operators +, -, /, *, %]"
echo -n " ---> "
read num1 op num2
case "$op" in
+|-|\*|/|%) echo "$num1 $op $num2 =" $((num1 $op num2)) ;;
*) echo "Bad Operator: $op choose [+, -, *, /, %]" ;;
esac
您可以在
man bash
的算术展开部分中阅读更多关于这一点的信息引用您的所有变量,例如“$op”
。引用您的所有变量,例如“$op”
。