shell脚本编写手册(2021重编)

作者:微信小助手

发布时间:2021-11-04T16:46:21


{
    #!/bin/sh                             # 在脚本第一行脚本头 # sh为当前系统默认shell,可指定为bash等shell
    shopt                                 # 显示和设置shell中的行为选项
    sh -x                                 # 执行过程
    sh -n                                 # 检查语法
    set -e                                # 若指令传回值不等于0,则立即退出shell
    (a=bbk)                               # 括号创建子shell运行
    basename /a/b/c                       # 从全路径中保留最后一层文件名或目录
    dirname                               # 取路径
    $RANDOM                               # 随机数
    $$                                    # 进程号
    source FileName                       # 在当前bash环境下读取并执行FileName中的命令  # 等同 . FileName
    sleep 5                               # 间隔睡眠5秒
    trap                                  # 在接收到信号后将要采取的行动
    trap "" 2 3                           # 禁止ctrl+c
    $PWD                                  # 当前目录
    $HOME                                 # 家目录
    $OLDPWD                               # 之前一个目录的路径
    cd -                                  # 返回上一个目录路径
    local ret                             # 局部变量
    yes                                   # 重复打印
    yes |rm -i *                          # 自动回答y或者其他
    ls -p /home                           # 区分目录和文件夹
    ls -d /home/                          # 查看匹配完整路径
    time a.sh                             # 测试程序执行时间
    echo -n aa;echo bb                    # 不换行执行下一句话 将字符串原样输出
    echo -e "s\tss\n\n\n"                 # 使转义生效
    echo $a | cut -c2-6                   # 取字符串中字元
    echo {a,b,c}{a,b,c}{a,b,c}            # 排列组合(括号内一个元素分别和其他括号内元素组合)
    echo $((2#11010))                     # 二进制转10进制
    echo aaa | tee file                   # 打印同时写入文件 默认覆盖 -a追加
    echo {1..10}                          # 打印10个字符
    printf '%10s\n'|tr " " a              # 打印10个字符
    pwd | awk -F/ '{ print $2 }'          # 返回目录名
    tac file |sed 1,3d|tac                # 倒置读取文件  # 删除最后3行
    tail -3 file                          # 取最后3行
    outtmp=/tmp/$$`date +%s%N`.outtmp     # 临时文件定义
    :(){ :|:& };:                         # fork炸弹,系统执行海量的进程,直到系统僵死
    echo -e "\e[32mcolour\e[0m"           # 打印颜色
    echo -e "\033[32mcolour\033[m"        # 打印颜色
    echo -e "\033[0;31mL\033[0;32mO\033[0;33mV\033[0;34mE\t\033[0;35mY\033[0;36mO\033[0;32mU\e[m"    # 打印颜色

    正则表达式{

        ^                       # 行首定位
        $                       # 行尾定位
        .                       # 匹配除换行符以外的任意字符
        *                       # 匹配0或多个重复字符
        +                       # 重复一次或更多次
        ?                       # 重复零次或一次
        ?                       # 结束贪婪因子 .*? 表示最小匹配
        []                      # 匹配一组中任意一个字符
        [^]                     # 匹配不在指定组内的字符
        \                       # 用来转义元字符
        <                       # 词首定位符(支持vi和grep)  <love
        >                       # 词尾定位符(支持vi和grep)  love>
        x\{m\}                  # 重复出现m次
        x\{m,\}                 # 重复出现至少m次
        x\{m,n\}                # 重复出现至少m次不超过n次
        X?                      # 匹配出现零次或一次的大写字母 X
        X+                      # 匹配一个或多个字母 X
        ()                      # 括号内的字符为一组
        (ab|de)+                # 匹配一连串的(最少一个) abc 或 def;abc 和 def 将匹配
        [[:alpha:]]             # 代表所有字母不论大小写
        [[:lower:]]             # 表示小写字母
        [[:upper:]]             # 表示大写字母
        [[:digit:]]             # 表示数字字符
        [[:digit:][:lower:]]    # 表示数字字符加小写字母

        元字符{

            \d       # 匹配任意一位数字
            \D       # 匹配任意单个非数字字符
            \w       # 匹配任意单个字母数字下划线字符,同义词是 [:alnum:]
            \W       # 匹配非数字型的字符

        }

        字符类:空白字符{

            \s       # 匹配任意的空白符
            \S       # 匹配非空白字符
            \b       # 匹配单词的开始或结束
            \n       # 匹配换行符
            \r       # 匹配回车符
            \t       # 匹配制表符
            \b       # 匹配退格符
            \0       # 匹配空值字符

        }

        字符类:锚定字符{

            \b       # 匹配字边界(不在[]中时)
            \B       # 匹配非字边界
            \A