美文网首页Linux基础
Shell脚本day3~echo命令/数组/传递参数/基本运算符

Shell脚本day3~echo命令/数组/传递参数/基本运算符

作者: IIronMan | 来源:发表于2019-06-18 11:05 被阅读4次

    一、echo命令

    • 1.1、显示普通字符串

      #!/bin/bash
      echo "iPhoneX 标配 8388"
      
    • 1.2、显示转义字符

      #!/bin/bash
      echo "  " iPhoneX 顶配 9688 "  "
      
    • 1.3、显示变量

      #!/bin/bash
      iphone="iPhoneX"
      echo "${iphone} 9688"
      
    • 1.4、显示换行

      #!/bin/bash
      # 错误写法
      echo "iPhoneX \n hello未来"
      # 正确写法(-e:表示开启转义功能)
      echo -e "iPhoneX \n hello未来"
      
    • 1.5、不换行:打印结果是:iPhoneX hello未来 科技

      # 注意:"-e"开启转义功能,"\c"表示不换行
      #!/bin/bash
      echo -e "iPhoneX hello未来 \c "
      echo "科技"
      
    • 1.6、显示一个执行命令:执行结果:2019年 6月 9日 星期日 16时29分24秒 CST

      # 要求:输出当前时间,还有很多命令,后面学习一些
      #!/bin/bash
      echo `date`
      

      提示:date两边的是 斜着的符号

    • 1.7、退出命令
      语法:exit 状态->退出程序

      • 写法一

        #!/bin/bash
        iphone="404报错童鞋,买了一台iPhoneX,非常不好,出bug"
        echo ${iphone}
        exit
        echo "你完蛋了,买了假货"
        
      • 写法二

        #!/bin/bash
        iphone="404找不到错误"
        echo ${iphone}
        exit 0  
        age=100
        if(age > 100){
          exit 1
        }
        

        退出的状态码


        退出的状态码

    二:Shell脚本语言-数组

    • 2.1、语法:数组名=(值一,值二,值三)

    • 2.2、初始化数组:
      方式一:打印结果:老大

      #!/bin/bash
      name=("老大" "刘二" "王三" "李四")
      #输出
      echo $name
      #默认:打印第一个元素
      

      方式二:打印结果:老大 刘二

      #!/bin/bash
      name=()
      name[0]="老大"
      name[1]="刘二"
      name[2]="王三"
      name[3]="李四"
      echo ${name[0]}  ${name[1]}
      
    • 2.3、读取数组
      语法结构:${数组名[下标]}

      #!/bin/bash   
      name=("老大" "刘二" "王三" "李四")
      #输出一个元素       
      echo ${name[0]}
      #输出所有->"@"表示输出所有的数据
      echo ${name[@]}
      

      "@"表示输出所有的数据

    • 2.4、数组长度

      • 方式一:获取数组元素个数,打印结果:4
        语法:${#数组名[@]}

        #!/bin/bash
        name=("老大" "刘二" "王三" "李四")
        echo ${#name[@]}
        
      • 方式二:获取数组元素个数,打印结果:4
        语法:${#数组名[*]}

        name=("老大" "刘二" "王三" "李四")
        echo ${#name[*]}
        
      • 方式三:获取单个元素->字符长度,打印结果:2
        语法:${#数组名[下标]}

        name=("老大" "刘二" "王三" "李四")
        echo ${#name[0]}
        

    三:Shell脚本语言-传递参数

    • 3.1、语法定义?

      ./文件名称.sh 参数1 参数2 参数3...
      
    • 3.2、案例,脚本内容如下:

      #${0}->表示文件名称
      #${1}->表示参数1
      #${2}->表示参数2
      echo ${0} ${1} ${2}
      

      执行脚本代码:

      ./hello.sh "哈哈" "嘿嘿"
      
    • 3.3、特殊字符

      • <1>、 $#:获得脚本输入参数个数,脚本内容如下:

        echo ${#} 
        

        执行脚本代码:

        ./hello.sh "逗你玩" "饿到爆"
        

        执行脚本结果:2

      • <2>、$*:显示整个脚本输入参数列表,脚本内容如下:

        echo ${*} 
        

        执行脚本代码:

        ./hello.sh "逗你玩" "饿到爆"
        

        执行脚本结果:"逗你玩" "饿到爆"

    四:Shell脚本语言-基本运算符

    • 4.1、算数运算符

      • <1>、+ 加运算,注意:expr 规定命令,结果是 10

        a=1
        b=9
        c=`expr $a + $b`
        echo "c的值:$c"
        
      • <2>、- 减运算,注意:expr 规定命令,结果是 6

        a=8
        b=2
        c=`expr $a - $b`
        echo "c的值:$c"
        
      • <3>、* 乘运算,注意:expr 规定命令,注意: * 要加一个转义符号 \,结果是 18

        a=2
        b=9
        c=`expr $a \* $b`
        echo "c的值:$c"
        
      • <4>、/ 除运算,注意:expr 规定命令,结果是 4

        a=8
        b=2
        c=`expr $a / $b`
        echo "c的值:$c"
        
      • <5>、% 求余运算,注意:expr 规定命令,结果是 2

        a=8
        b=3
        c=`expr $a % $b`
        echo "c的值:$c"
        
      • <6>、= 赋值运算,注意:expr 规定命令,结果是 8

        a=8
        b=$a
        echo "b的值:$b"
        
      • <7>、== 等于判断运算,注意:expr 规定命令,结果是:a不等于b

        a=8
        b=9
        if [ $a == $b ]
        then
        echo "a等于b"
        else
        echo "a不等于b"
        fi
        
    • 4.2、关系运算符

      • <1>、-eq(equal:相等):检测两个数是否相等,当等返回true,结果是:a不等于b

        a=100
        b=200
        if [ $a -eq $b ]
        then
          echo "a等于b"
        else
          echo "a不等于b"
        fi
        
      • <2>、-ne(not equal:不等):检测两个数是否相等,不相等返回 true,结果是:a不等于b

        a=100
        b=200
        if [ $a -ne $b ]
        then
          echo "a不等于b"
        else
          echo "a等于b"
        fi
        
      • <3>、-gt(greater than:大于):检测左边数是否大于右边数,如果是,返回true,结果是:a小于b

        a=100
        b=200
        if [ $a -gt $b ]
        then
        echo "a大于b"
        else
        echo "a小于b"
        fi
        
      • <4>、-lt(less than:小于):检测左边数是否小于右边数,如果是,返回true,结果是:a小于b

        a=100
        b=200
        if [ $a -lt $b ]
        then
        echo "a小于b"
        else
        echo "a大于b"
        fi
        
      • <5>、-ge(greater than or equal:大于或等于):检测左边数是否(大于+等于)右边数,如果是,返回true,结果是:a小于b

        a=100
        b=200
        if [ $a -ge $b ]
        then
        echo "a大于等于b"
        else
        echo "a小于b"
        fi
        
      • <6>、-le(less than or equal:小于或等于):检测左边数是否(小于+等于)右边数,如果是,返回true,结果是:a小于等于b

        a=100
        b=200
        if [ $a -le $b ]
        then
        echo "a小于等于b"
        else
        echo "a大于b"
        fi
        
    • 4.3、布尔运算符

      • <1> !:非运算,表达式为true,返回true,否则返回false

        a=100
        b=200
        if [ $a != $b ]
        then
           echo "a不等于b"
        fi
        
      • <2> 、-o:或运算,有一个表达式为true,则返回true

        a=100
        b=200
        if [ $a -lt 200 -o $b -gt 200 ]
        then
           echo "成立"
        fi
        
      • <3> 、-a:与运算,两个表达式为true,则返回true,结果不成立

        a=100
        b=200
        if [ $a -lt 200 -a $b -gt 200 ]
        then
            echo "成立"
        else
            echo "不成立"
        fi
        
    • 4.4、逻辑运算符

      • <1> 、&&:逻辑且->and,结果:不成立

        a=100
        b=200
        if [ $a -lt 200 ] && [ $b -gt 200 ]
        then
        echo "成立"
        else
        echo "不成立"
        fi
        
      • <2> 、||:逻辑 OR,结果:成立

        a=100
        b=200
        if [ $a -lt 200 ] || [ $b -gt 200 ]
        then
        echo "成立"
        else
        echo "不成立"
        fi
        
    • 4.5、字符串运算

      • <1>、=:检测两个字符串是否相等,如果相等返回true

        a="HR"
        b="iOS"
        if [ $a = $b ]
        then
        echo "字符串a等于字符串b"
        else
        echo "字符串a不等于字符串b"
        fi
        
      • <2>、!=:检测两个字符串是否相等,如果不相等返回true

        a="HR"
        b="iOS"
        if [ $a != $b ]
        then
        echo "字符串a不等于字符串b"
        else
        echo "字符串a等于字符串b"
        fi
        
      • <3>、-z:检测字符串长度是否为0,如果是返回true,结果:a不存在值

        a="iOS"
        if [ -z $a ]
        then
        echo "a为空,不存在值"
        else
        echo "a存在值"
        fi
        
      • <4>、-n:检测字符串长度是否为0,如果不是0,返回true

        a="iOS"
        if [ -n "$a" ]
        then
        echo "a存在"
        else
        echo "a不存在值"
        fi
        

        提示:在使用 -n 的时候, 变量a要这样写 "$a"

      • <5>、字符串:检测字符串是否为空,不为空返回true

        a="JAR"
        if [ $a ]
        then
            echo "a不为空"
        else
            echo "a为空"
        fi
        
    • 4.6、文件测试运算符file="/Users/wangchong/Desktop/opencv知识/array.sh"

      • <1>、-d file:检测文件是不是一个目录,如果是,那么返回true,结果是:不是一个目录

        if [ -d $file ]
        then
        echo "是一个目录"
        else
        echo "不是一个目录"
        fi
        
      • <2>、-r file:检测文件是否可读,如果是,那么返回true

        if [ -r $file ]
        then
        echo "可读"
        else
        echo "不可读"
        fi
        
      • <3>、-w file:检测文件是否可写,如果是,那么返回true

        if [ -w $file ]
        then
        echo "可写"
        else
        echo "不可写"
        fi
        
      • <4>、-x file:检测文件是否是可执行文件,如果是,那么返回true

        if [ -x $file ]
        then
        echo "可执行"
        else
        echo "不可执行"
        fi
        
      • <5>、-f file:检测文件是否是一个普通文件(既不是目录,也不是设备文件),如果是,那么返回true

        if [ -f $file ]
        then
        echo "文件为普通文件"
        else
        echo "文件为特殊文件"
        fi
        
      • <6>、-s file:检测文件是否为空(文件有内容),如果是,那么返回true

        if [ -s $file ]
        then
        echo "文件有内容"
        else
        echo "文件没有内容"
        fi
        
      • <7>、-e file:检测文件是否存在(包含了:目录和文件),如果是,那么返回true

        if [ -e $file ]
        then
        echo "存在"
        else
        echo "不存在"
        fi
        
    • 五、Shell脚本语言-流程控制

    • 5.1、"if"语句,提示:fi 代表结束

      语法结构

      if [条件]
      then
      代码
      fi
      

      代码结构

      a="iOS"
      b="HR"
      if [ $a = $b ]
      then
        echo "字符串a等于字符串b"
      fi
      
    • 5.2、"if else"语句

      语法结构

      if [条件]
      then
      代码
      else
      代码
      fi
      

      代码结构

      a="iOS"
      b="HR"
      if [ $a = $b ]
      then
      echo "字符串a等于字符串b"
      else
      echo "字符串a不等于字符串b"
      fi
      
    • 5.3、"if-else-if-else"

      语法结构

      if [条件]
      then
      代码
      elif [条件]
      then
      代码
      else
      代码
      fi
      

      代码结构

      a="iOS"
      b="HR"
      if [ $a = $b ]
      then
      echo "字符串a等于字符串b"
      elif [ $a ]
      then
      echo "字符串a不为空"
      else
      echo "字符串a不等于字符串b"
      fi
      
    • 5.4、"for"循环语句

      语法结构

      for 变量名 in item1 item2 item3 …
      do
        代码
      done
      

      代码案例一

      for name in "a" "b" "c" "d"
      do
         echo ${name}
      done
      

      代码案例二 (特殊的字符必须进行转义)

      for name in "I don\`t know"
      do
         echo ${name}
      done
      

      代码案例三 :从变量读取列表

      value="I don\`t know"
      for name in ${value}
      do
         echo ${name}
      done
      

      代码案例四 :读取目录->通配符

      file="/Users/wangchong/Desktop/*"
      for name in ${file}
      do
         echo ${name}
      done
      

      代码案例五 :嵌套循环(类似于C语言写法)

      for ((a=1;a < 7; a++))
      do
         echo ${a}
      done
      
    • 5.5、"while"循环

      语法结构

      while(条件)
        do
        代码
        done
      

      代码案例一

      a=1
      while(($a<10))
       do
        echo ${a}
        a=`expr $a + 1`
       done
      

      代码案例二:无限循环

      a=1
      while :
       do
        echo "hello"
       done
      

      代码案例三:无限循环

      for((::))
      do
        echo "hello"
      done
      
    • 5.6、"case"语句

      语法结构

      case 值 in
        模式1)
            代码
            ;;
        模式2)
            代码
            ;;
        模式3)
            代码
            ;;
        sac
      

      代码案例一

      number=1
      case $number in
        1) echo "等于1"
            ;;
        2) echo "等于2"
            ;;
        3) echo "等于3"
            ;;
        esac
      
    • 5.7、until循环:不满足条件才会进入 until,与while的用法相反
      语法结构

      until 条件
      do
         逻辑代码
      done
      

      代码案例一

      i=1
      until (($i > 1))
      do
         echo "i小于等于1"
      done
      
    • 5.8、跳出循环:break

      • <1>、跳出单个循环

        for ((i=0;i<10;i++))
        do
           echo "i的值是 $[i]"
           if [ $i -eq 5 ]
           then
              echo "退出循环"
           break
           fi
        done
        
      • <2>、跳出内部循环

        for ((i=0;i<10;i++))
        do
           echo "i的值是 $[i]"
           for ((j=0;j<10;j++))
           do
              echo "j的值是 $[j]"
              if [ $j -eq 5 ]
              then
                echo "退出内层循环,i的值:$[i],j的值:$[j]"
                break
              fi
           done
        done
        

        提示: breakbreak 1 一个意思, 代表跳出1层循环

      • <3>、跳出外部循环

        for ((i=0;i<10;i++))
        do
           echo "i的值是 $[i]"
           for ((j=0;j<10;j++))
           do
              echo "j的值是 $[j]"
              if [ $j -eq 5 ]
              then
                echo "退出内层循环,i的值:$[i],j的值:$[j]"
                break 2
              fi
           done
        done
        

        提示: break 2 代表退出 2 层循环

    • 5.9、结束当前的循环:continue

      for ((i=0;i<5;i++))
      do
        if [ $i -eq 3 ]
        then
          echo "结束当前循环的值 i=$[i]"
          continue
        fi
          echo "i的值是 $[i]"
      done
      

      打印结果是:

      i的值是 0
      i的值是 1
      i的值是 2
      结束当前循环的值 i=3
      i的值是 4
      

    最后奉上几张图

    关系运算符
    布尔运算符
    逻辑运算符
    字符串运算符
    文件测试
    命令状态

    相关文章

      网友评论

        本文标题:Shell脚本day3~echo命令/数组/传递参数/基本运算符

        本文链接:https://www.haomeiwen.com/subject/rxdnxctx.html