Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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_Bash_Shell - Fatal编程技术网

Linux特殊shell意义问题

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 $

我如何使这段代码工作,使“*”和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 $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”