shell编程基础之分支结构和循环结构

    SEO基础 wuya 166次浏览 已收录 0个评论

    数值类型

    • 说明:定义或赋值,解析器都认为是字符操作,即使定义的变量是数值,除非添加let
    • 示例:
      #! /bin/bash
      
      a=1
      
      #a=a+2
      #a=$a+2
      
      #let a=a+2
      let a+=2
      
      echo $a

    字符串类型

    • 单引号:其中的字符都会保持原样,变量也不会别解析
    • 双引号:其中的变量会解析(替换成变量的值),特殊字符:$、\、"
    • 反引号:其中的内容会作为命令执行
      echo `date`
    • 长度统计:echo ${#name}
    • 子串提取:echo ${name:2:3},从下标为2的字符开始提取3个

    数组类型

    • 定义:a=(1 2 3)
    • 成员访问:echo ${a[1]}
    • 所有元素:echo ${a[*]}
    • 统计个数:echo ${#a[@]}

    各种运算

    • test:测试真假
      #! /bin/bash
      
      if test 1 -lt 2;then
          echo 'ok'
      fi
      
      if [ 1 -lt 2 ]
      then
          echo 'ok'
      fi
    • 数值比较
      符号 说明
      -lt 小于
      -le 小于等于
      -gt 大于
      -ge 大于等于
      -eq 等于
      -ne 不等于
    • 字符串比较
      符号 说明
      = 相等
      != 不相等
      -z 判断字符串长度是否为0
      -n 判断字符串长度是否不为0
    • 文件判断
      符号 说明
      -f 是否是普通文件
      -d 是否是目录文件
      -c 是否是字符设备文件
      -b 是否是块设备文件
      -r 是否可读
      -w 是否可写
      -x 是否可执行
      -s 文件存在,并且至少有一个字符
    • 逻辑运算
      符号 说明
      -a 逻辑与(and),也可使用&&
      -o 逻辑或(or),也可以使用||
      ! 逻辑非(not)
      • 示例:
      #! /bin/bash
      
      if [ 1 -lt 3 -a 3 -gt 2 ];then
          echo 'ok'
      fi
      
      if [ 1 -lt 3 ] && [ 3 -gt 2 ];then
          echo 'ok'
      fi
      
      if [ ! 1 -gt 3 ];then
          echo 'ok'
      fi

    分之结构

    • if-elif-else-fi
      #! /bin/bash
      
      if [ 1 -gt 2 ];then
          echo '1 > 2'
      elif [ 3 -gt 2 ];then
          echo '3 > 2'
      else
          echo 'xxxx'
      fi
    • case-in-esac
      #! /bin/bash
      
      read -p 'please input a charactor:' ch
      
      case $ch in
          [a-z])
              echo 'alpha'
              ;;
          [0-9])
              echo 'number'
              ;;
          *)
              echo 'others'
              ;;
      esac

    循环结构

    • for-infor
      #! /bin/bash
      
      a=(1 2 3)
      
      #for x in ${a[*]}
      #for x in 11 22 33
      #for x in /etc/*
      #for x in {1..10}
      for x in `seq 1 10`
      do
          echo $x
      done
      
      for ((i=0;i<${#a[@]};i++))
      do
          echo ${a[$i]}
      done
      
      for i in {1..100}
      do
          let j+=i
      done
      
      echo $j
    • while
      #! /bin/bash
      
      i=1
      
      while [ $i -le 10 ]
      do
          echo $i
          #let i++
          #let i+=1
          ((i++))
      done
    • until
      #! /bin/bash
      
      i=1
      
      until [ $i -gt 10 ]
      do
          echo $i
          ((i++))
      done
    • break、continue关键字也可以使用

    学海无涯 , 版权所有丨如未注明 , 均为原创丨转载请注明shell编程基础之分支结构和循环结构
    喜欢 (1)
    发表我的评论
    取消评论
    表情 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址