• Shell脚本速查手册


    Bash 脚本基础

    定义变量

    定义变量:name=value 需要注意,等号两侧不能有空格;

    定义局部变量:local name=value;

    定义只读变量:readonly name;

    删除变量:unset name。

    定义数组

    定义数组:

    myArray=(value0 value1 value2)

    使用数组:

    ${数组名[下标]}

    获取数组所有元素:

    ${数组名[*]} 或者

    ${数组名[@]}

    获取数组长度

    ${#array_name[@]} 或者

    ${#array_name[*]}

    运算符

    关系运算符

    -eq 检测两个数是否相等,相等返回true;

    -ne 检测两个数是否不想等,不相等返回true;

    -ge 检测左边的数是否大于右边的,如果是,则返回true;

    字符串运算符

    = 检测两个字符串是否相等,相等返回true;

    != 检测两个字符串是否不相等,不相等返回true;

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

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

    $ 检测字符串是否为空,不为空返回true。

    脚本控制流程

    if 控制

    if condition
    then
      command;
    fi  
    
    • 1
    • 2
    • 3
    • 4

    if else 控制

    if condition
    then
       command;
    else
       command;
    fi   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    if-else-if-else控制

    if condition1
    then 
       command1
    elif condition2
    then
       command2
    else
       commandN
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    For循环

    for var in item1..itemN 
    do
       command
    done
    
    • 1
    • 2
    • 3
    • 4

    While循环

    while condition
    do 
       command
    done
    
    • 1
    • 2
    • 3
    • 4

    Until循环

    until condition
    do
      command
    done
    
    • 1
    • 2
    • 3
    • 4

    Case(Switch)控制

    casein
    value1)
      command1
      ;;
    value2)
       command2
       ;;
    esac   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Bash 脚本进阶

    定义函数
    [function] funname [()]
    {
        action;
        [return int;]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其中

    • funtion 关键词可带可不带;
    • funname 根据实际需要定义;
    • return int 根据需要加入。

    函数参数

    • 调用函数传递的参数可以在函数中以 $1的方式获取;
    • 使用$1的方式仅可用于前10个参数;

    特殊参数

    • $0 文件名;
    • $# 传递到脚本和函数的参数个数;
    • $* 以一个单字符串显示所有向脚本传递的参数;
    • $$ 脚本允许的当前进程ID号;
    • $? 显示最后命令退出状态,0表示没有错误,其他任何值表明有错误。
    文件包含

    文件包含

    # 写法1
    . filename # 注意点号和文件名中间有空格
    # 写法2
    source filename
    
    • 1
    • 2
    • 3
    • 4

    Base 脚本编写常用命令

    以下是编写Bash脚本的常用命令,你可以根据自己的需要进行选择。

    sort

    sort 命令是用例对内容进行排序的,可以将文本、数字进行排序。

    • sort path/to/file 对文件内容进行升序排序;
    • sort --unique path/to/file 对文件内容进行唯一排序;
    echo

    echo 命令是用来输出内容的。

    • echo “my path is $PATH” 输出包含环境变量的信息;
    • echo “hello world” >> {{file.txt}} 在文件尾部追加内容;
    read

    read 命令是用来获取用户输入内容,即标准输入设备(键盘)输入的内容。

    • read -a arrayname 把单词清单读入arrayname的数组里;

    • read -p “Enter your input here:\n” $variable 提示,并读入数据设置给变量;

    • while read line;do echo “$line”;done 按行读取内容,并执行命令;

    mapfile

    从标准输入读取行并赋值到数组。

    -t 表示移除尾随行分隔符,默认是换行符

    既然是读取标准输入,常见的就有以下几种读取形式:
    $ mapfile myarr $ mapfile myarr < <(cat alpha.log) # 2.进程替换

    shift

    shift 命令可以用于将函数得参数移除,其他参数向前移动。

    getopts

    getopts 命令是一个内置变量,一般用在循环中。每当执行循环时,getopts都会检查下一个命令选项,如果这些选项出现在option中,则表示是合法选项,否则不是合法选项。并将这些合法选项保存在VARIABLE这个变量中。比如:

    while getopts ":co" opt; do
      case "$opt" in
      "c")
         echo "command1"
         ;;
       "o")
          echo "command2"
          ;;
       "*")
          echo "other command"
          ;;
        esac 
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    sed

    基本用法:sed + 选项 + “指令” 文件

    -i 表示直接对内容进行修改,不加 i 时默认只是预览,不会对文件进行实际修改

    -n 表示取消默认输出,sed默认会输出所有文本内容,使用 -n 参数后只显示处理过的行

    --打印1到5行
    sed -n '1,5p'  1.txt       
    
    • 1
    • 2
    other

    ${variable:?} 表示检验变量是否为空

    eval也可以用于回显简单变量,不一定时复杂变量。如 test.txt内容:hello shell world!

    myfile="cat test.txt"
    eval echo $myfile  #result:hello shell world!
    
    • 1
    • 2

    Base 脚本调试

    1、启用 Shell 脚本调试模式的方法

    下面是主要的 Shell 脚本调试选项:

    • -v (verbose 的简称) - 告诉 Shell 读取脚本时显示所有行,激活详细模式
    • -n (noexec 或 no ecxecution 简称) - 指示 Shell 读取所有命令然而不执行它们,这个选项激活语法检查模式
    • -x (xtrace 或 execution trace 简称) - 告诉 Shell 在终端显示所有执行的命令和它们的参数。 这个选项是启用 Shell 跟踪模式

    第一个机制是改变 Shell 脚本首行,如下,这会启动脚本调试。

    #!/bin/sh 选项
    
    • 1

    其中, 选项可以是上面提到的一个或多个调试选项。

    第二个是使用如下调试选项启动 Shell,这个方法也会打开整个脚本调试。

    $ shell 选项   参数1 ... 参数N
    
    • 1

    第三个方法是使用内置命令 set 去调试一个给定的 Shell 脚本部分,如一个函数。这个机制是重要的,因为它让我们可以去调试任何一段 Shell 脚本。

    启用调试模式:

    $ set -选项
    
    • 1

    禁用调试模式:

    $ set +选项
    
    • 1

    比如:

    #!/bin/bash
    #script to print brief system info
    ROOT_ID="0"
    DATE=`date`
    NO_USERS=`who | wc -l`
    UPTIME=`uptime`
    check_root(){
      if [ "$UID" -eq "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
      fi
    }
    #turning on and off debugging of check_root function
    set -x ; check_root;  set +x ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    推荐阅读

    如何入门 Bash 编程

    编写更好 Bash 脚本的 8 个建议

    Linux 中高效编写 Bash 脚本的 10 个技巧

  • 相关阅读:
    1137 Final Grading
    【计算机网络黑皮书】应用层
    面试中的问题
    【花雕体验】11 上手ESP32C3
    美食推荐|美食推荐小程序|基于微信小程序的美食推荐系统设计与实现(源码+数据库+文档)
    08-8.2.2 希尔排序
    数据中心基础设施管理,如何化被动为主动
    英语语法 — 被动语态
    javascript中的polyfill是什么,polyfill和babel的关系
    【JAVA学习笔记】46 - (43)第十一章作业
  • 原文地址:https://blog.csdn.net/qq3399013670/article/details/128044493