shell命令总结(二)

作者: 迈阿密小白 | 来源:发表于2018-07-05 23:09 被阅读89次

    接上篇学习笔记,这次主要总结参数 传递 运算符 循环 相关

    传递参数

    执行脚本的时候,可以向脚本传递参数,脚本内获取参数的格式为:n。 n代表一个数字, 1 为执行脚本的第一个参数, 2 为执行脚本的第二个参数..... 但是参数过多,如10,就要用{}括起来,{10}

    举个例子:

    先创建一个脚本try.sh,内容如下

    #!/bin/bash
    #try
    echo "脚本名:$0"
    echo "第一个参数: $1"
    echo "第二个参数:$2"
    echo "第十个参数:$10"
    echo "第十个参数:${10}"
    echo "参数总数: $#"
    echo "参数全部输出: $*"
    echo "参数全部输出: $@"
    

    运行

     bash ./try.sh 1 2 3 4 5 6 7 8 9 aa 11
    
    脚本名:./try.sh
    第一个参数: 1
    第二个参数:2
    第十个参数:10    ----这边未加{},所以认为 $1 后面加 0 
    第十个参数:aa    ----正确结果
    参数总数: 11
    参数全部输出: 1 2 3 4 5 6 7 8 9 aa 11   同"1 2 3 4 5 6 7 8 9 aa 11"
    参数全部输出: 1 2 3 4 5 6 7 8 9 aa 11   同"1" "2" "3" ......"aa" "11"
    
    

    运算符

    • 算数运算符

    a=10;b=20
    [ $a == $b ];echo $?  ----1  中间有空格; $? 标识上一步的结果,如果0正确,其他数字都是错误
    [ $a != $b ];echo $?  ----0
    c=`expr $a + $b`;echo $c  ---30
    d=`expr $a \* %b`;echo $c  ---200  乘法要用\标识一下
    
    • 关系运算符

      主要包括以下几种:
      ge 大于等于
      eq 等于
      ne 不等于
      gt 大于
      lt 小于
      le 小于等于
      -a 逻辑与 等价于 &&
      -0 逻辑或 等价于 ||
     [ $a -eq $b ];echo $?  ----1 等于
     [ $a -lt $b ];echo $?  ----0 小于
     [ $a -gt $b ];echo $?  ----1 大于
     [ $a -ne $b ];echo $?  ----0 不等于
     [ $a -le $b -a $a -eq $b ];echo $?  --- 1  小于等于且等于
     [ $a -le $b -a $a -eq $b ];echo $?  --- 0  小于等于或等于
    
    • 字符串运算符

      主要包括以下几种:

      -z 检测字符串长度是否为0,为0返回 true

      -n 检测字符串长度是否为0,不为0返回true

      [ str ] 检测字符串是否为空,不为空返回true

    a="hello shell"
    [ -n "$a" ];echo $? --- 0   不为0,返回true
    [ -z "$a" ];echo $? --- 1   不为0,返回false
    [ "$a" ];echo $?   --- 0   字符串不为空,返回true
    if [ "$str" ]; 
    then  
        echo "不是空"; 
    else 
        echo "空字符串"; 
    fi                    -----不是空
    
    • 文件测试运算符

      主要包括一下几种:

      -e 检测文件是否存在,存在返回true

      -d 检测是否是目录,是返回true

      -f 检测是否是普通文件,是返回true

      -r 检测文件是否可读,如果是,则返回 true

      -w 检测文件是否可写,如果是,则返回 true

      -x 检测文件是否可执行,如果是,则返回 true

      d='/d/awk.txt'
      [ -f $d ];echo $?  ----0  d是文件,正确返回 0 
      [ -e $d ];echo $?  ----0  文件存在,正确返回 0
      [ -d $d ];echo $?  ----1  是文件不是文件夹,错误返回 1
      [ -r $d ];echo $?  ----0  可读文件,返回 0
      [ -w $d ];echo $?  ----0  可读文件,返回 0
      
      

    循环

    • if - then - else

    d='/d/awk.txt'
    if [-e $d ]           ---- 文件存在,所以 file exist
    then
    echo file exist
    else
    echo file not exist
    fi
    
    if [ -d $d ]        ---- file 
    then 
    echo not dir
    elif [ -f $d ]
    echo file
    else 
    echo over
    fi
    
    • for 循环

      遍历数组
      a=(1 2 3 4 5 6)
      for i in ${a[*]}
      do 
      echo ${i}
      done             ---- 1 2 3 4 5 6
      
      遍历文件夹
      for file in `ls`
      do
      echo $file
      done           2.20/   2.22/   2.23/   2.26/
      
      
    • while 循环

      a=0
      while [[ $a -lt 5 ]];      ----0 1 2 3 4
      do 
      echo ${a}
      a=`expr $a + 1`
      done
      
      配合break  a 为2的时候 
      a=0
      while [[ $a -lt 5 ]];      ----0 1 2 
      do 
      echo ${a}
      if [[ $a -eq 2 ]]
      break
      else
      a=`expr $a + 1`
      done
      
      配合continue       
      a=0
      while [[ $a -lt 5 ]];      ----0 
      do 
      echo ${a}
      if [[ $a -eq 2 ]]
      continue
      else
      a=`expr $a + 1`
      break
      done
      
      

    相关文章

      网友评论

      本文标题:shell命令总结(二)

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