shell 脚本易错点记录

今天需要完成一个 nginx 服务的启停控制脚本,是服务可以一键完成启动、停止、重载等功能。

完成脚本的过程中会遇到一些老朋友, 但许久不见再见面还是会感到陌生,因此记录一下以加深记忆。

1. “[: =: unary operator expected”

看下我这里出错的脚本行

. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

这几行的目的是,source 一下系统配置文件 /etc/sysconfig/network, 这里面可能会定义变量 NETWORKING,值为 yes 或者 no,即需要判断主机网络是否可用来判断是否启动服务,

问题在于如果配置文件里面没有 NETWORKING 变量,那么 [ ${NETWORKING} = “no” ] 就会被解释为 [ = “no” ],= 是双目运算符,此时这行脚本只有一个参数,于是提示语法错误,要求提供单目运算符。

解决办法是尽量在条件判断处使用双中括号,而不是单中括号,即:

[[ ${NETWORKING} = "no" ]] && exit 0

2. 方法调用

shell 方法定义的时候按下面的方式定义:

function_name() {
   #  shell scripts
 }

function_name # 正确调用: shell 方法

function_name() # 错误调用: shell 方法

但调用方法的时候不需要带上括号,否则会提示语法错误

参考链接

shell中各种括号的作用()、(())、[]、[[]]、{}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值