收集的48个Shell脚本小技巧

2019-09-23 09:36:26丽君


$ a=$( (echo 'out'; echo 'error' 1>&2) 2>&1 1>/dev/null)
$ echo $a
error

14. 删除前3行


$cat a.txt | sed 1,3d

15. 读取多个域到变量

read a b c <<< "xxx yyy zzz"

16. 遍历数组
array=( one two three )
for i in ${array[@]}
        do
echo $i
done

17. 查看目录大小

$ du –sh ~/apps

18. 查看CPU信息

$ cat /proc/cpuinfo

19. date

$ date +%Y-%m-%d
2012-12-24
$ date +%Y-%m-%d –date ‘-1 day'
2012-12-23
$ date +%Y-m-%d –date ‘Dec 25'
2011-12-25
$ date +%Y-m-%d –date ‘Dec 25 – 10 days'
2011-12-15

20. 获取路径名和文件名


$ dirname ‘/home/lalor/a.txt'
/home/lalor
$ basename ‘/home/lalor/a.txt'
a.txt

21. 并集和交集

comm 可以用来求并集,交集,差集,假设现在有两个文件a和b,它们的内容如下:
$cat a
1
3
5

$cat b
3
4
5
6
7

$comm a b
1
        3
    4
        5
    6
    7

$comm -1 -2 a b #交集
3
5

$comm a b | sed 's/t//g' #并集
1
2
3
4
5
6
7

$comm -1 -3 a b | sed 's/t//g' #b-a
4
6
7

22. awk复杂分隔符

多字符作分隔符
$ echo "a||b||c||d" | awk -F '[|][|]' '{print $3}'
  c

多种分隔符1

$echo "a||b,#c d" | awk -F '[| ,#]+' '{print $4}'
  d
多种分隔符2
$echo "a||b##c|#d" | awk -F '([|][|])|([#][#])' '{print $NF}'
  c|#d

23. 产生一个随机数

echo $RANDOM

24. 按照模式split 文件
csplit server.log /PATTERN/ -n 2 -s {*} -f server_result -b "%02d.log" -z

/PATTERN/ 用来匹配某一行,分割过程由此开始
{*} 根据匹配,重复执行分割
-s 静默模式
-n 分割后文件名后缀中,数字的个数
-f 分割后的文件名前缀
-b 指定后缀格式

25. 获取文件名或者扩展名

var=hack.fun.book.txt
echo ${var%.*}
hack.fun.book
echo ${var%%.*}
hack
echo ${var#.*}
fun.book.txt
echo ${var##.*}
txt

26. 以 root 帐户执行上一条命令。

$sudo !!

其中: * !! 是指上一条命令 * !$ 上一条命令的最后一个参数 * !* 上一条命令的所有参数 * !:3 上一条命令的第3个参数
例如: