Bash 实用技巧
一、空值判断与设定默认值
常见做法:
比较简便的做法:
如果你习惯副作用,还可以简化为:
一个完整的例子:
二、空值判断与程序中断
常见做法:
比较简便的做法:
一个完整的例子:
三、忘记 sudo
常见场景:
比较简便的做法:
!!
是重新执行上一条命令,sudo !!
则是使用 sudo
模式重新执行上一条命令。
一个完整的例子:
如果在 Vim 编辑保存时,忘记 sudo,则运行如下命令:
%
代表当前文件名,tee
命令用来复制当前输入到指定文件中。
一个具体的例子:
四、设置调试选项
1、在每个命令被执行前先打印,在脚本中可以添加如下命令:
等价命令,可以在脚本外部使用如下命令运行:
如果想关闭该选项,则把 -
改为 +
(其他调试选项也是相同的做法),如下示例:
一个完整的例子:
2、试图使用未定义的变量,就立即退出,在脚本中可以添加如下命令:
这样做的好处是可以避免使用未定义变量造成非预期的结果,例如:
但有时候在已经设置了-u 后,某些地方还是希望能把未定义变量展开为空串,可以这样写:
一个完整的例子:
五、计算运行时间
一个完整的例子(计算 1000 位小数的 PI):
六、使用 tee 将输出落盘
有时候我们会用到把好多条命令用管道串在一起的情况。如 cmd1 | cmd2 | cmd3 | ...
这样会让问题变得难以排查,因为中间数据我们都看不到。
这时可以用 tee
命令:
tee
命令的作用在于把输入流写入指定文件的同时,同时还保持原样输出到下一管道的输入流中,可以说该操作是透明的。
一个完整的例子:
七、tail 查看日志
如果我们想打印末尾 N 行,则使用 -n N
选项,如果想实时查看日志输出,则添加 -f
选项。
一个完整的例子:
八、检测命令运行状态
常见做法:
比较简便的做法:
一个完整的例子:
九、搜索字符串并显示上下文
命令如下:
PATTERN
是要搜索的模式字符串, -A N
向上返回指定行数, -B N
向下返回指定行数。
一个完整的例子:
十、添加可读注释
文件头部示例:
函数示例:
十一、长脚本使用 main()
如果脚本长到至少包含一个其它函数,这时就可以考虑添加 main 函数了。main 函数调用示例如下:
注意:这里使用 "$@" 而不是 "$*",原因是我们需要界定命令传递进来的不同选项和参数,而不是作为一个整体。
一个完整的例子(加减法计算器):
十二、命令行启用 VI-STYLE
每次回车之后默认是在 Insert
模式下,按 ESC
之后,就回到 Command
模式了。
一个完整的例子:
十三、快速备份
一个完整的例子:
版权声明: 本文为 InfoQ 作者【麦迪文】的原创文章。
原文链接:【http://xie.infoq.cn/article/d77151ed998bf4fe07a6b4b0c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论