Linux系列之shell编程

# shell脚本开头
#!/bin/bash
  • 使用$n变量得到执行脚本时输入的第n个参数

  • 使用$#变量拿到执行脚本时输入的参数个数

  • 使用$*$@获取执行脚本输入的所有参数(其中$*将所有参数当做一个整体)

  • 使用$?查看最后一条命令的执行情况,返回0表示上条命令正确执行;如果该变量的值非0,则证明上条命令执行不正确

  • 使用$(())或者$[]运算符进行参数之间的运算

  • 条件判断:[ condition ]或者 test condition[]中条件非空即为true,例如:[ all ]true[ ]false

    --常见的判断条件--

    两个整数之间的判断:等于(-eq)、不等于(-ne)、大于(-gt)、小于(-lt)、大于等于(-le)、小于等于(-ge)

    按照文件权限进行判断:是否具有可读权限(-r)、是否具有可写权限(-w)、是否具有可执行权限(-x)

    按照文件属性进行判断:是否为文件(-f)、是否为目录(-d)、是否存在(-e)

  • 单分支流程控制

    # 语法
    if [ conditon ]; then
      structure
    fi
    
    # 或者  
    if [ conditon ]
    then
      structure
    fi
    
    # 举例
    if [ $1 -gt 18 ] && [ $1 -lt 35 ]; then echo ok
    fi
    # 或者以下方式,其中-a表示and,-o表示or
    if [ $1 -gt 18 -a $1 -lt 35 ]; then echo ok
    fi
    
  • 多分支流程控制

    1. if-else方式
    if [ condition ]
    then
      structure
    elif [ condition]
    then
      structure
    else
      structure
    fi
    
    1. switch-case方式
    case $variety in
    "value")
    structure
    ;;
    "value")
    structure
    ;;
    "value")
    structure
    ;;
    *)
    structure
    ;;
    esac
    
    1. for循环方式
    for((初始值;循环控制条件;变量变化))
    do
      structure
    done
    

    下面给出示例(递归求和):

    #!/bin/bash
    # 使用for循环进行求和
    sum=0
    for((i=0;i<=$1;i++))
    do
      sum=$[$sum + $i]
    done
    echo $sum
    
    # 使用while方式进行求和
    a=1
    while[ $a -le $1 ]
    do 
      sum2=[$sum2 + $a]
      a=$[$a + 1]
      #或者let sum2+=a
      #或者let a+=1
    done
    echo $sum2
    
    for os in Linux Windows macOS; do echo $os; done
    

    下面的{1..n}表示一个序列

    for   i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
    

    $*$@没有被引号引起来的时候作用完全一样;在两者被引号引起来的时候(在for循环中),$*会将所有变量当做1个变量输出,而$@ 会逐一输出所有的变量

    • 读取控制台输入

    read

    [-p] : 控制台提示内容

    [-t] :控制台持续时间

    #!/bin/bash
    read -t 10 -p "please input your name:" name
    echo "welcome, $name!"
    
    • 系统函数

    在脚本编写过程中如果需要调用系统函数则需要使用$()进行命令替换

    basename: 用来获取文件名称,可以添加[suffix]参数来将文件名中的后缀名称去掉

    # 获取某文件的文件名称
    basename /home/test.sh .sh
    

    dirname: 获取文件所在的目录(针对当前输入来输出文件所在的路径,输出会将输入的最后一个/去掉)

    #!/bin/bash
    # 输出当前文件所在的绝对路径
    echo path=$(cd $(dirname $0); pwd)
    
    • 自定义函数

      语法:[function] funname[()]

      {

      Action;

      [return int;]

      }

      注:function返回值范围只能在0~255之间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。