1. CMD 输出打印行数

[[email protected]]# ls | grep android | nl

2. 分割输出,每个一行

[[email protected]]# cat /tmp/test.txt 
10.0.57.24:10100
[[email protected]]# cat /tmp/test.txt | tr ":" "\n"
10.0.57.24
10100

3. 正则表达式提取 IP 地址

[[email protected]]# cat /tmp/test.txt
10.0.57.24:10100
[[email protected]]# cat /tmp/test.txt | grep -o "[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}"
10.0.57.24

4. 条件判断

[[email protected]]# cat /tmp/test.sh
if [[ "$leader_host" = "$curr_host" ]]; then
    return 0
else
    return 1
fi

5. 休眠一段时间

[[email protected]]# cat /tmp/test.sh
sleep 5

6. 命令中带特殊符号

用单引号就好了:

[[email protected]]# export TOKEN='#$%^&'

7. 写入文本到文件

[[email protected]]# cat <<EOT >> greetings.txt
line 1
line 2
EOT

8. 安全得创建目录

[[email protected]]# mkdir -p mydir

这样创建即使子目录不存在也不会出错

9. 安全得创建链接

[[email protected]]# ln -sfn source target

10. 字符串数组

[[email protected]]# cat backup.sh
MONGO_COLLECTIONS=("a" "b" "c" "d" "e")
for i in $MONGO_COLLECTIONS
do
  mongoimport --db databases --collection $i /tmp/databases/$i.json
done

11. 无限循环

[[email protected]]# cat /tmp/run.sh 
while :
do
    sleep 1
done

这里用 while : 表示无限循环,其中 : 是 shell 内置命令,永远返回 true;当然可以用 while true,但是其实 true 是一个系统命令 /bin/true,所以每次循环都会开进程调用一次,造成性能损耗,所以推荐使用 while :

12. test 数值测试

test 命令用于检查某个条件是否成立,可以进行数值、字符和文件的测试,可选项为:

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

13. test 字符串测试

参数 说明
= 相等
!= 不相等
-z 字符串 字符串长度 == 0
-n 字符串 字符串的长度 != 0

14. test 文件测试

参数 说明
-e 文件名 文件 == 存在
-r 文件名 文件 == 存在 && 可读
-w 文件名 文件 == 存在 && 可写
-x 文件名 文件 == 存在 && 可执行
-s 文件名 文件 == 存在 && 至少有一个字符
-d 文件名 文件 == 存在 && == 目录
-f 文件名 文件 == 存在 && == 普通文件
-c 文件名 文件 == 存在 && == 字符型特殊文件
-b 文件名 文件 == 存在 && == 块特殊文件

15. 数字系列数组

[[email protected]]# for i in {1..7}
do
echo $i
done

16. 一次创建系列目录

[[email protected]]# mkdir dir_{0..9}