数值计算与条件判断

  1. 算术运算命令
    在shell脚本编程中,可以使用的运算符很多,和C语言基本一致



    我们需要了解掌握的是一些运算命令

    • (())用于整数计算的运算符,效率高,另外,在(())语法中不要求有空格,但是有也不会影响结果,在(())中的变量可以不加前导符$
      ((i=i+1))       数值计算
      i=$((i+1))      同上
      ((8>7&&7>5))    条件判断
      echo $((2+1))   数值判断后输出
      
    • let用于整数计算,类似于(())
      let i=i+1等同于((i=i+1))
      
    • expr 求表达式的值
      expr 1 + 1注意空格的使用
      
      可以使用expr判断一个数是否为整数,$?变量保存了上一条命令的输出,使用未知变量与一个整数相加,如果返回值是0就代表该未知变量是整数,否则不是整数
       expr $a + 5 &>/dev/null
       RETRAL_A=$?
       expr $b + 5 &>/dev/null
       RETRAL_B=$?
       if [ $RETRAL_A -ne 0 -o $RETRAL_B -ne 0 ]
       then
           echo "your have input two number"
           exit 2
       fi
      
    • $[]整数运算
      i=$[1+1]
  2. 条件测试
    形式如下,[]和内容,以及逻辑运算符之间至少有一个空格
    test <expression>
        test -f file || echo exist
    [ expression ]
        [ -z "$1" -a -z "$2" ]注意空格的使用
    [[ expression ]]
        [[ -f file && -f file2 ]]
    (( expression ))
        (($num<10))
    
    • 文件测试


    • 字符串测试表达式,注意判断符号的两端要有空格,最好将变量加上双引号后进行比较测试


    • 整数测试比较


    • 逻辑操作符


    • 区别总结


    • 特殊的判断结构
      当条件1成立时执行后面的命令块儿
      test condition1 && {
      command1
      command2
      }
      [ condition1  ] && {
      command1
      command2
      }
      [[ condition1 ]]  && {
      command1
      command2
      } 
      
      当条件1成立时执行命令2,否则执行命令3
      [ condition1 ] && command2 || command3
      
  3. if语句
    • 形式1(推荐)if语句可以嵌套
      if [ condition ]
      then
            command
      fi
      
    • 形式2
      if [ condition ] ; then
            command
      fi
      
    • 多分支结构
      if [ condition1 ] 
      then
          command1
      elif [ condition2 ]
      then
          command2
      else
          command3
      fi
      
  4. 判断数字的思路
    • 使用expr根据返回值来判断
      expr $num + 5 ; [ $? -eq 0 ]
    • 替换变量中的所有数字,随后看字符串是否为空
      使用sed
      [ -n " echo xiaozhi123 | sed 's/[0-9]//g' " ]
      使用变量替换
      ${param//[0-9]/}
  5. 示例
    • 判断数据类型,使用特殊判断结构,使用expr判断数字
      while true
      do
          read -p "please input:" a
          expr $a + 5 &>/dev/null
          [ $? -eq 0 ] && echo int || echo char
      done
      
    • 验证数据类型,然后做四则运算
      [ $# -ne 2 ] && {
          echo -e "your must give two arguments!\n"
          exit 1
      }
      a=$1
      b=$2
      expr $a + 5 &>/dev/null
      RETRAL_A=$?
      expr $b + 5 &>/dev/null
      RETRAL_B=$?
      if [ $RETRAL_A -ne 0 -o $RETRAL_B -ne 0 ]
      then
          echo "your have input two number"
          exit 2
      fi
      
      echo "a+b=$(($a+$b))"
      echo "a-b=$(($a-$b))"
      echo "a*b=$(($a*$b))"
      echo "a/b=$(($a/$b))"
      
    • 判断数据类型,比较大小
      read -p "please type two num:" a b
      if [ -z "$a" -o -z "$b" ]
      then
          echo "you must type two arguments"
          exit 1
      fi
      expr $a + 5 &> /dev/null
      RETRAL_A=$?
      expr $b + 5 &> /dev/null
      RETRAL_B=$?
      if [ $RETRAL_A -eq 0 -a $RETRAL_B -eq 0 ]
      then
          if [ $a -lt $b ]
          then
              echo "$a<$b"
          elif [ $a -gt $b ]
          then
              echo "$a>$b"
          else
              echo "$a=$b"
          fi
      else
          echo "you must input two num"
      fi  
      
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,169评论 0 2
  • 0.linux启动的步骤 设备加电----》BIOS自检-----》grub引导启动-----》加载内核----》...
    萌面大叔2阅读 4,177评论 0 1
  • Shell脚本语言学习一Shell脚本语言学习三 Shell脚本语言 echo命令? 显示普通字符串脚本代码: ...
    SimpleBK阅读 3,199评论 0 1
  • 时隔多日,我已经有段时间没有写简说了,可能就是有要务在身,占据了我大量的精力和时间,以至于简书所谓的更新。 而我...
    一心向上的大飞阅读 3,690评论 1 2
  • 讲清楚自己做谋事的原因, 以及问清楚, 他人,做某事的原因~ 这是幸福生活的保障! 帮助你远离“我以为”“我认为”...
    孙晓晓晓阅读 2,481评论 0 0