zoukankan      html  css  js  c++  java
  • 《Linux Shell脚本攻略》读书笔记

    更多精彩内容,请关注微信公众号:后端技术小屋

    《Linux Shell脚本攻略》是一本适合初学者系统学习Bash Shell的书籍,墙裂推荐。以下是我阅读这本书的笔记,希望对读者有用。

    1. 输出颜色字符
    echo -e "e[1:41m" # 1表示背景色
    
    1. echo打印!需转义
    echo "hello, bash!"  # 报错,因为!在shell中属于特殊字符,需要转义
    echo "hello, bash!" # 不报错,!已转义
    echo 'hello, bash!'  # 不报错,在单引号中!无需转移
    
    1. printf可用于格式化输出
    # 用法类似C中的`printf`
    printf "format"  var1 var2 ...
    
    1. echo常用选项
    echo -n  # 不在字符串末尾添加换行符
    
    echo -e  # 支持转义字符表示
    echo -e "e[id XXXXXX" # 显示颜色字体,其中id表示背景颜色id
    
    1. pgrep
    # 根据进程名获取进程id
    pgrep <进程名>           # 相当于ps -ef  
    
    cat /proc/$PID/environ  # 查看进程运行过程中的环境变量
    
    1. 用(())进行算数运算
    # 计算两个数之和,有以下两种写法:
    c=$((a+b))   # 赋值方式1
    ((c = a+b))  # 赋值方式2
    
    1. 输出重定向
    # 将标准输出和标准错误输出重定向到run.log中
    ./binary >run.log 2>&1 
    
    # 更简洁的写法:注意&和>之间不能有空格 
    sh mybash.sh &>run.log
    
    1. 用exec创建文件描述符
    exec 4 < log.txt
    exec 5 > log.txt
    exec 6 >> log.txt
    
    1. 哈希数组
    # 声明
    declare -a map 
    
    # 定义
    ${map[key]}=value
    
    # 获取所有key
    ${!map[@]}
    declare -a HTTP_RESPONSE=(
            [200]="OK"
            [400]="Bad Request"
            [403]="Forbidden"
            [404]="Not Found"
            [405]="Method Not Allowed"
            [500]="Internal Server Error"
    )
    
    1. date获取时间
    # 显示秒数
    date +%s 
    
    # 将秒数转成字符串
    date -d @秒数 
    

    11 tput控制终端光标

    # 设置光标位置
    tput cup 行号  列号
    
    # 保存光标位置
    tput sc 
    
    # 回到保存的光标位置
    tput rc
    
    # 清除当前光标到行尾
    tput ed
    
    1. read读取标准输入
    # 设置不回显
    read -s
    # 设置超时时间 
    read -t 
    # 设置读入字节数
    read -n 字节数
    # 设置提示
    read -p "please input passwd"
    
    1. cat显示文件内容
    # 显示时忽略多余的空行 
    cat -s file
    
    # 显示每一行的行号
    cat -n file 
    
    # 打印出制表符
    cat -T file 
    
    1. 用find进行文件搜索
    # 打印符合搜索条件的文件或目录
    find <path> -name XXX  -print 
    
    # 删除符合条件的文件或目录
    find  <path> -name XXX -exec rm -rf {} ;
    
    1. xargs:从标准输入拼装命令
    # 常用用法
    cat file | xargs
    
    # 设定每行的字段数
    cat file | xargs -n 3 
    
    # 以null为换行符
    cat file | xargs -0
    
    # 代替命令中位置
    cat file | xargs -I{} rm -rf {}
    
    1. tr: 替换或删除标准输入的字符
    # 替换 
    tr  字符集1 字符集2 
    
    # 删除
    tr -d 字符集
    
    # 补集
    tr -d -c 要留下的字符集
    
    # 去除重复空格
    tr -s " "
    
    1. md5sum: 对文件生成md5 checksum
    # 生成md5值
    md5sum file  > file.md5
    
    # 校验 
    md5sum -c file.md5
    
    1. sort: 对文件内容进行排序
    # 按照字符串排序 
    cat file | sort 
    
    #按照数字排序
    cat file | sort -n 
    
    # 逆序排序
    cat file | sort -r
    
    # 按照某列排序 
    cat file | sort -k 列数 
    
    1. dd:复制并转换文件
    # 从/dev/zero生成文件 
    dd if=/dev/zero of=data.file bs=100k count=1 
    
    1. split:分割大文件
    # 将文件分成大小为10k的小文件,且小文件命名中后缀长度为3
    split data.file -b 10k -a 3
    
    1. 字符串分割
    # 获取文件后缀
    echo ${filename##*.}
    
    # 获取文件名
    echo ${filename%.*}
    
    1. 单词表
    cat /usr/share/dict/words
    
    1. expect: 自动化交互式输入
    # expect 
    spawn  ./interactive.sh 
    expect "Password:"
    send "XXX
    "
    
    1. comm: 求两个文件的交集/差集/并集
    # 求差集a-b
    comm a.txt b.txt -1
    
    # 求a+b并集
    comm a.txt b.txt 
    
    # 求ab交集
    comm a.txt b.txt -1 -2 
    
    1. chattr: 修改文件属性
    # 将文件设置为不可修改
    chattr +i file
    # 去除不可修改属性
    chattr -i file 
    
    1. 寻找软连接
    # 方法一
    ll -rt | grep -P "^l" | awk '{print $8}'
    
    # 方法二
    find . -type l
    
    1. diff: 比对两个文件(或目录)
    diff -abru 1.txt 2.txt 
    diff -abru 1.txt 2.txt > 12.patch 
    
    1. patch: 对文件打补丁
    patch -p1 1.txt < 12.patch
    
    1. 命令行当前目录管理
    # pushd: 将当前目录压入栈中
    # popd: 从栈中弹出目录,并作为当前目录
    # dirs: 显示栈中目录
    
    # 常规用法
    pushd  directory
    popd
    
    # 指定目录
    dirs
    pushd +N
    popd +N
    
    1. grep: 搜索文件内容
    # 匹配内容显示颜色
    grep --color=auto 
    
    # 统计匹配行数
    grep -c 
    
    # 显示匹配行号
    grep -n 
    
    # 显示匹配字符偏移量
    grep -o -b
    
    # 显示匹配文件列表
    grep -l  1.txt 2.txt
    
    # 使用文件匹配
    grep -f pattern.txt  file.txt
    
    # 静默模式
    grep -q 
    
    # 定位代码
    grep -R -n 
    
    # 忽略大小写
    grep -i 
    
    # 匹配多个样式
    grep -e pattern1 -e pattern2
    
    # 显示匹配行之前N行
    grep -A 
    
    # 显示匹配行之后N行
    grep -B 
    
    # 显示匹配行之前之后N行
    grep -C 
    
    1. sed: 文本过滤和转换工具
    # sed "s///" 替换
    echo  "hello wolrd" | sed "s/hello/goodbye/"
    
    # sed -i 替换文件内容
    sed -i 's/hello/goodbye/' 1.txt
    
    # sed 's///g' 替换所有匹配内容
    echo "thisthisthisthis" | sed 's/this/THIS/g'
    
    # sed 's///ng' 从第n处匹配开始替换
    echo "thisthisthisthis" | sed 's/this/THIS/2g'
    
    # sed '//d' 删除匹配行
    cat diff.sh | sed '/^$/d' 
    
    # 匹配字符串标记
    echo this is an example | sed 's/w+/[&]/g'
    
    # 捕捉字符串
    echo "this is a digit 7 in a numbger" | sed 's/digit ([0-9])/1/'
    
    1. paste: 合并文件
    # 按列合并文件
    paste file1 file2
    paste file1 file2 -d  ","
    
    1. rev: 字符串逆序输出
    echo "1234" | rev
    
    1. tac: 对多行文件逆序输出
    # 行逆序
    seq 1 10 | tac
    
    1. 设置命令行编辑模式
    set -o vi
    

    推荐阅读

    更多精彩内容,请扫码关注微信公众号:后端技术小屋。如果觉得文章对你有帮助的话,请多多分享、转发、在看。
    二维码

  • 相关阅读:
    字符串阵列分别输出元素的索引,原值和长度
    一个字符转换为整数
    从字符串数组中寻找数字的元素
    C#创建自己的扩展方法
    判断是否为空然后赋值
    C# yield关键词使用
    从字符串数组中把数字的元素找出来
    C#实现一张塔松叶
    计算2个时间之间经过多少Ticks
    对int array进行排序
  • 原文地址:https://www.cnblogs.com/taiyang-li/p/14450450.html
Copyright © 2011-2022 走看看