观书有会意处,题其衣裳,以记其事~
1. CMD 输出打印行数
1 | [root@min]# ls | grep android | nl |
2. 分割输出,每个一行
1 | [root@min]# cat /tmp/test.txt |
3. 正则表达式提取 IP 地址
1 | [root@min]# cat /tmp/test.txt |
4. 引号嵌套
1)首先,在bash脚本中,有三种引号:
- 单引号:两个单引号包围起来的字符串就是普通的字符串,它将保留原始的字面意思.
- 双引号:两个双引号包围起来的字符串,部分特殊字符将起到它们的作用.这些特殊字符有: 美元符$, 反斜杠\, 反引号, 感叹号!.
- 反引号:两个反引号包围起来的字符串,将作为命令来运行,执行的输出结果作为该反引号的内容,称为命令替换,它有另一种更好的写法: $(command)
2)难点:单引号中如何包含单引号?
1 | [min@bogon:] ~ $ echo $'abc\'abc' |
第一种方法是bash特有的,$’string’ 之间到反斜杠都将转义字符,第二种方法,通过单引号的ASCII码来打印单引号,而第三种方法,则是通过截断命令,在中间插入单引号来实现。一般用第一种方法是最优雅的。
3)备忘两则
1 | [min@bogon:] ~ $adb shell $'kill -9 $(ps -ef |grep "sh watcher.sh" |awk \'{print $2}\')' |
1 | [min@bogon:] ~ $ name=helleworld |
5. 判断文件/文件夹是否存在
1)文件夹不存在则创建
1 | if [ ! -d "/data/" ];then |
2)判断文件是否存在
1 | if [ -f "/data/filename" ];then |
3)文件比较符
1 | -e 判断对象是否存在 |
6. 判断目录是否为空
1 | BAK=/opt/sh/test |
7. Shell特殊变量
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
8.Shell 函数
1)带返回值的函数
1 | funWithReturn(){ |
2)带参数的函数
1 | funWithParam(){ |
8. grep 常见用法
1 | -c 或 --count : 计算符合样式的列数; |