更多精彩内容,请关注微信公众号:后端技术小屋git
《Linux Shell脚本攻略》是一本适合初学者系统学习Bash Shell的书籍,墙裂推荐。如下是我阅读这本书的笔记,但愿对读者有用。redis
echo -e "\e[1:41m" # 1表示背景色
echo "hello, bash!" # 报错,由于!在shell中属于特殊字符,须要转义 echo "hello, bash\!" # 不报错,!已转义 echo 'hello, bash!' # 不报错,在单引号中!无需转移
# 用法相似C中的`printf` printf "format" var1 var2 ...
echo -n # 不在字符串末尾添加换行符 echo -e # 支持转义字符表示 echo -e "\e[id XXXXXX" # 显示颜色字体,其中id表示背景颜色id
# 根据进程名获取进程id pgrep <进程名> # 至关于ps -ef cat /proc/$PID/environ # 查看进程运行过程当中的环境变量
# 计算两个数之和,有如下两种写法: c=$((a+b)) # 赋值方式1 ((c = a+b)) # 赋值方式2
# 将标准输出和标准错误输出重定向到run.log中 ./binary >run.log 2>&1 # 更简洁的写法:注意&和>之间不能有空格 sh mybash.sh &>run.log
exec 4 < log.txt exec 5 > log.txt exec 6 >> log.txt
# 声明 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" )
# 显示秒数 date +%s # 将秒数转成字符串 date -d @秒数
11 tput控制终端光标shell
# 设置光标位置 tput cup 行号 列号 # 保存光标位置 tput sc # 回到保存的光标位置 tput rc # 清除当前光标到行尾 tput ed
# 设置不回显 read -s # 设置超时时间 read -t # 设置读入字节数 read -n 字节数 # 设置提示 read -p "please input passwd"
# 显示时忽略多余的空行 cat -s file # 显示每一行的行号 cat -n file # 打印出制表符 cat -T file
# 打印符合搜索条件的文件或目录 find <path> -name XXX -print # 删除符合条件的文件或目录 find <path> -name XXX -exec rm -rf {} \;
# 经常使用用法 cat file | xargs # 设定每行的字段数 cat file | xargs -n 3 # 以null为换行符 cat file | xargs -0 # 代替命令中位置 cat file | xargs -I{} rm -rf {}
# 替换 tr 字符集1 字符集2 # 删除 tr -d 字符集 # 补集 tr -d -c 要留下的字符集 # 去除重复空格 tr -s " "
# 生成md5值 md5sum file > file.md5 # 校验 md5sum -c file.md5
# 按照字符串排序 cat file | sort #按照数字排序 cat file | sort -n # 逆序排序 cat file | sort -r # 按照某列排序 cat file | sort -k 列数
# 从/dev/zero生成文件 dd if=/dev/zero of=data.file bs=100k count=1
# 将文件分红大小为10k的小文件,且小文件命名中后缀长度为3 split data.file -b 10k -a 3
# 获取文件后缀 echo ${filename##*.} # 获取文件名 echo ${filename%.*}
cat /usr/share/dict/words
# expect spawn ./interactive.sh expect "Password:" send "XXX\n"
# 求差集a-b comm a.txt b.txt -1 # 求a+b并集 comm a.txt b.txt # 求ab交集 comm a.txt b.txt -1 -2
# 将文件设置为不可修改 chattr +i file # 去除不可修改属性 chattr -i file
# 方法一 ll -rt | grep -P "^l" | awk '{print $8}' # 方法二 find . -type l
diff -abru 1.txt 2.txt diff -abru 1.txt 2.txt > 12.patch
patch -p1 1.txt < 12.patch
# pushd: 将当前目录压入栈中 # popd: 从栈中弹出目录,并做为当前目录 # dirs: 显示栈中目录 # 常规用法 pushd directory popd # 指定目录 dirs pushd +N popd +N
# 匹配内容显示颜色 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
# 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/'
# 按列合并文件 paste file1 file2 paste file1 file2 -d ","
echo "1234" | rev
# 行逆序 seq 1 10 | tac
set -o vi
推荐阅读后端
更多精彩内容,请扫码关注微信公众号:后端技术小屋。若是以为文章对你有帮助的话,请多多分享、转发、在看。
数组