BASH 对程序员的重要性
BASH 脚本,即使你不是程序员也少不了会使用、 会编写——因为它真的很强大,而且无处不在,在可见的将来也不会消失。作为程序员,也许 你觉得 BASH 脚本太难写,BASH 语法太难看,BASH 脚本不安全,但是也许 BASH 不会变成 主流编程语言,它总是那么易得,仿佛就在手边,每个 GNU/Linux 发行版都有它,甚至连 Docker 也要带着它,如果你不会编写 BASH 脚本,那么你可能就错失了最直接、最自然、 最简单的解决方案,简直是入宝山而空返。
BASH 是 shell(命令解释器)的一种,而命令解释器是 UNIX 最前卫、最强大的思想之一。 使用 BASH 可以快速把一系列命令和工具组合起来完成复杂任务,这些脚本还可以保存起来 对付以后的类似任务。
管道|
是命令解释器的另一个利器。利用管道,BASH 可以简明地构建多个命令之间的输入
输出逻辑关系,并强有力地按照程序员的想法执行出结果。这种能力是其他编程语言难以企
及的。
下面看两个例子。
- 列出最近有变化的 5 个目录
ls -tc | head -n5 | tr '\n' '\0' | xargs -0 ls
说明:
-
ls -tc
: 按状态改变时间列出目录。 -
head -n5
: 列出前五个。 -
`tr ‘\n’ ‘\0’: 把换行符替换未字符串结尾。
-
xargs -0 ls
: 列出筛选以出来的字符串为目录名的内容。
当然,最后的命令ls
可以根据需要调整成其他命令,非常实用。
- 列出历史中曾经使用过的复杂命令
history | cut -d' ' -f3- | awk -F'|' '{ print NF-1 " " $0 }' | sort -n | tail
说明:
-
history
: 列出历史命令。 -
cut -d' ' -f3-
: 移除历史命令的第三列(以空格分割),就是把历史命令的编号去掉。 -
awk -F'|' '{ print NF-1 " " $0 }'
: 使用awk
打印命令里的|
个数。 -
sort -n
: 按数字大小排列结果。 -
tail
:列出最后十个结果。
这个大家可以试一试,其中-f3-
可能需要根据自己的终端设置调整。
希望这两个小例子给予大家一些想象的空间——BASH 实际带来的便利会非常大。或早或晚, 作为程序员,你都需要学习 BASH 编程。
下面是两个小练习,大家看看是什么结果?
-
seq 1 10
-
tr -dc 'a-zA-Z0-9~!@#$%^&*_()+}{?></";.,[]=-' < /dev/urandom | fold -w 32 | head -n 1
预祝大家 2021 年元旦快乐!