Linux-编写Shell的几个技巧
来源:互联网 发布:姚明身体数据 编辑:程序博客网 时间:2024/05/21 17:25
- 1 脚本中添加注释
- 2 当运行失败时使脚本退出
- 3 当 Bash 用未声明变量时使脚本退出
- 4 使用双引号来引用变量
- 5 在脚本中使用函数
- 6 字符串比较时用 而不是
- 7 用 command 而不是老旧的 command 来做代换
- 8 用 readonly 来声明静态变量
- 9 环境变量用大写字母命名而自定义变量用小写
- 10 总是对长脚本进行调试
1、 脚本中添加注释
在脚本中作注释能帮你或别人翻阅你的脚本时了解脚本的不同部分所做的工作。
注释用 # 号来定义
2、 当运行失败时使脚本退出
有时即使某些命令运行失败,bash 可能继续去执行脚本,这样就影响到脚本的其余部分(会最终导致逻辑错误)。用下面的行的方式在遇到命令失败时来退出脚本执行:
# 如果命令运行失败让脚本退出执行set -o errexit # 或set -e
举例
#!/bin/bash# 若命令失败让脚本退出set -o errexit # 若未设置的变量被使用让脚本退出set -o nounsetecho "Names without double quotes" echonames="Tecmint FOSSMint Linusay"for name in $names; do echo "$name"done#定义一个错误的命令failure_cmd=$(pwde)echoecho "Names with double quotes" echofor name in "$names"; do echo "$name"doneexit 0
执行脚本:
xgj@root>./test.sh Names without double quotesTecmintFOSSMintLinusay./test.sh: line 12: pwde: command not found
3、 当 Bash 用未声明变量时使脚本退出
Bash 也可能会使用能导致起逻辑错误的未声明的变量。因此用下面行的方式去通知 bash 当它尝试去用一个未声明变量时就退出脚本执行:
# 若有用未设置的变量即让脚本退出执行set -o nounset# 或set -u
举例: VAR_NO_DEFINE 未定义 ,在脚本中使用
#!/bin/bash# 若命令失败让脚本退出set -o errexit # 若未设置的变量被使用让脚本退出set -o nounsetecho "Names without double quotes" echonames="Tecmint FOSSMint Linusay"for name in $names; do echo "$name"doneecho $VAR_NO_DEFINEechoecho "Names with double quotes" echofor name in "$names"; do echo "$name"doneexit 0
执行脚本:
xgj@root>./test.sh Names without double quotesTecmintFOSSMintLinusay./test.sh: line 12: VAR_NO_DEFINE: unbound variable
4、 使用双引号来引用变量
当引用时(使用一个变量的值)用双引号有助于防止由于空格导致单词分割开和由于识别和扩展了通配符而导致的不必要匹配。
#!/bin/bash# 若命令失败让脚本退出set -o errexit # 若未设置的变量被使用让脚本退出set -o nounsetecho "Names without double quotes" echonames="Tecmint FOSSMint Linusay"for name in $names; do echo "$name"doneechoecho "Names with double quotes" echofor name in "$names"; do echo "$name"doneexit 0
执行脚本:
xgj@root>./test.sh Names without double quotesTecmintFOSSMintLinusayNames with double quotesTecmint FOSSMint Linusay
5、 在脚本中使用函数
除了非常小的脚本(只有几行代码),总是记得用函数来使代码模块化且使得脚本更可读和可重用。
写函数的语法如下所示:
function check_root(){ command1; command2;}# 或check_root(){ command1; command2;}
写成单行代码时,每个命令后要用终止符号:
check_root(){ command1; command2; }
6、 字符串比较时用 = 而不是 ==
注意 == 是 = 的同义词,因此仅用个单 = 来做字符串比较,例如:
value1=”aaa”value2=”bbbb”if [ "$value1" = "$value2" ]
7、 用 $(command) 而不是老旧的 command
来做代换
命令代换 是用这个命令的输出结果取代命令本身。用 $(command) 而不是引号 command
来做命令代换。
这种做法也是 shellcheck tool (可针对 shell 脚本显示警告和建议)所建议的。例如:
user=`echo “$UID”`user=$(echo “$UID”)
8、 用 readonly 来声明静态变量
静态变量不会改变;它的值一旦在脚本中定义后不能被修改:
readonly passwd_file=”/etc/passwd”readonly group_file=”/etc/group”
9、 环境变量用大写字母命名,而自定义变量用小写
所有的 bash 环境变量用大写字母去命名,因此用小写字母来命名你的自定义变量以避免变量名冲突:
# 定义自定义变量用小写,而环境变量用大写nikto_file=”$HOME/Downloads/nikto-master/program/nikto.pl”perl “$nikto_file” -h “$1”
10、 总是对长脚本进行调试
如果你在写有数千行代码的 bash 脚本,排错可能变成噩梦。为了在脚本执行前易于修正一些错误,要进行一些调试。通过阅读下面给出的指南来掌握此技巧
Linux 中启用 Shell 脚本的调试模式
在 Shell 脚本中执行语法检查调试模式
在 Shell 脚本中跟踪调试命令的执行
- Linux-编写Shell的几个技巧
- linux 的shell 编写常用技巧
- Linux 中高效编写 Shell 脚本的 10 个技巧
- Shell脚本的编写技巧
- 基于ubuntu编写的几个shell脚本
- Shell脚本编写的几个小知识点
- 嵌入式Linux的Shell编写
- linux shell脚本的编写
- linux 编写自己的shell
- 编写Linux的shell脚本
- 几个shell小技巧
- shell脚本编写技巧
- shell脚本编写技巧
- shell脚本编写技巧
- shell脚本编写技巧
- <Linux shell>Linux常用的几个指令
- linux shell 以$开头的几个变量
- 转贴:Linux 任务控制的几个技巧
- BME-Stroke-Prevention-Applications
- C++文件读入_最后一个数据后面的换行问题
- 关于热更新时怎么清楚package.loaded重新加载
- html中的meta详解
- TCP/IP下三层协议----网络接口层与网络层
- Linux-编写Shell的几个技巧
- 判断一个字符串是否为另外一个字符串旋转之后的字符串
- 22day NSOperation
- SimpleShader
- Spring Boot : 属性配置&Controller注解补充(四)
- 错误、调试、测试
- 听罗辑思维关于商业模式的思考
- C8051F120单片机双串口配置(uart0,uart1)
- 整理数据代码