奥德赛F9 发表于 2018-8-22 08:56:47

shell-变量的数值计算

  变量的数值计算觉的有如下命令
  (())、let、expr、bc、$[]
  下面看看数值计算的运算符

  (())此法很常用且效率高,用于执行整数型的计算,不支持浮点型。
  如图
  # ((a=1+2**3-4%3))
  # echo $a
  8
  # b=$((1+2**3-4%3))
  # echo $b
  8
  #
  其中2**3是2的3次方
  # echo $((a++))
  8
  # echo $a
  9
  # echo $((a--))
  9
  # echo $a
  8
  # echo $((++a))
  9
  # echo $a
  9
  # echo $((--a))
  8
  # echo $a
  8
  #
  由上面可以看到,$((a++))是先输出a原来的值再去加,然后我们echo $a的时候,实际上就是输出变量a运算后的值啦。
  记忆方法:变量在前,先输出变量值,变量在后,就是先去处后输出变量的值
  上面都是整数的,如果有小数的话就会报错了,如果想用小数的话可以用bc命令
  # cat test.sh
  #!/bin/bash
  a=6
  b=2
  echo "a-b=$(( $a-$b ))"
  echo "a-b=$(( $a+$b ))"
  echo "a-b=$(( $a*$b ))"
  echo "a-b=$(( $a/$b ))"
  echo "a-b=$(( $a**$b ))"
  echo "a-b=$(( $a%$b ))"
  # sh test.sh
  a-b=4
  a-b=8
  a-b=12
  a-b=3
  a-b=36
  a-b=0
  如果你想通过命令行传参的方式实现上面的运算的话可以修改脚本为以下的
  #!/bin/bash
  a=$1
  b=$2
  echo "a-b=$(( $a-$b ))"
  echo "a-b=$(( $a+$b ))"
  echo "a-b=$(( $a*$b ))"
  echo "a-b=$(( $a/$b ))"
  echo "a-b=$(( $a**$b ))"
  echo "a-b=$(( $a%$b ))"
  如图:执行命令
  "test.sh" 9L, 167C 已写入
  # sh test.sh 8 2
  a-b=6
  a-b=10
  a-b=16
  a-b=4
  a-b=64
  a-b=0
  # sh test.sh 8 3
  a-b=5
  a-b=11
  a-b=24
  a-b=2
  a-b=512
  a-b=2
  下面我们做一个小的计算器
  # cat compute.sh
  #!/bin/bash
  echo $(($1$2$3))
  # sh compute.sh 1+2
  3
  #
  当然这个是比较简单的,很多的bug我们可以看看其他人写的
  http://chenhao6.blog.51cto.com/6228054/1232070
  其中的一些代码就写的不错,如下
  #!/bin/bash
  echo " ----------------------------------"
  echo "|这是一个简单的整数计算器,作者YUAN|"
  echo " ----------------------------------"
  echo
  while :
  do
  read -p"请输入一个整数: " nu
  expr $nu + 0 &> /dev/null
  if [ $? -eq 0 ]
  then
  echo "第一个数是$nu"
  break
  else
  echo "您输入的$nu不是整数请重新输入"
  fi
  done
  while :
  do
  read -p"请输入二个整数: " nu2
  expr $nu2 + 0 &> /dev/null
  if [ $? -eq 0 ]
  then
  echo "第二个数是$nu2"
  break
  else
  echo "您输入的$nu2不是整数请重新输入"
  fi
  done
  echo"------------------"
  echo "|1.加法          |"
  echo "|2.减法          |"
  echo "|3.乘法         |"
  echo "|4.除法         |"
  echo"------------------"
  read -p "请输入您想执行的算法:" me
  case $me in
  "1")
  sum=`expr $nu + $nu2`
  echo "$nu+$nu2=$sum"
  ;;
  "2")
  jian=`expr $nu - $nu2`
  echo "$nu-$nu2=$jian"
  ;;
  "3")
  chen=`expr $nu \* $nu2`
  echo "$nu*$nu2=$chen"
  ;;
  "4")
  chu=`expr $nu / $nu2`
  echo "$nu/$nu2=$chu"
  esac
  还有一种方法可以用来判断输入是不是为数字
  [ -z `echo "$1"|sed 's///g'`] && echo 1||echo 0
  上面的解析是说如果$1把数字删除了,还是不是空的,如果是空的,就输出1如果不是就输出0

页: [1]
查看完整版本: shell-变量的数值计算