发布于2021/09/26更新于2024/7/5
这段时间不务正业地在写一个BASH脚本,参考了一些资料,有一些感受,记录一下。
关于学习资料,最先看的是阮一峰推荐的《Bash 脚本教程》。🤔怎么说呢,如果作为小白为了看懂BASH脚本来入门的话,这个教程还算有用,毕竟是中文。如果要来写脚本,那有点不太合适了。找来找去,还是在tldp(The Linux Documentation Project)上的两套英文教程最合适:
另外,还有一些资料,比如GNU Bash的手册和一些Wiki等:
- GNU Bash Reference Manual[在线版]
- Greg’s Wiki[首页,BashFAQ,BashPitfalls,BashGuide,BashSheet,BashProgramming]
前面两套初学指引应该涵盖了绝大部分使用BASH的内容。不过,在具体使用过程中还会有许多坑,或者容易被忽略的地方,可以参考手册和上面提到的Wiki。另外,我列写了一些遇到的问题,作为给自己的参考:
- 使用
[[ ... =~ ... ]]表达式来正则匹配字符串时,正则表达式的规则部分直接写在终端和脚本文件中,以及在脚本文件中直接写在=~边上和用变量代入表达式中,要注意单双引号、空格、$字符、各种括号、正反斜线等特殊字符的转义。原因是在不同界面的多种“扩展(expansion)”。 - 数组
array用@或*作为索引且于双引号"中时,即"${array[@]}"与"${array[*]}",扩展后有所不同:前者将数组各元素扩展为多个单字(形式是list),后者将数组各元素以IFS变量中第一个字符连接后扩展为一个单字(形式是一个字串)。 - 避免在控制台以外的地方使用
ls获取多个文件的列表,因为其输出不能保证能够被解析为每个单个文件[见问题与解答,Greg’s Wiki on ParsingLs];在BASH中可考虑使用*来获取[详见Greg’s Wiki on glob#nullglob]。 - …