【Shell】shell脚本报错汇总

问题1: [: too many arguments

现象:有个if判断,执行老报错 [: too many arguments

最开始是这么写的

然后百度了一下,是needChange单词太多

解决方案:如图所示

参考:https://blog.csdn.net/wang_cir/article/details/6120101


问题2:sed: -e expression #1, char 111: unterminated `s' command

现象:用sed替换的时候,使用了正则匹配,然后一直不通过

这么写的

然后又百度,是因为replaceParam里面包含了 / 这个符号,所以换一个分隔符就行

解决方案:如图所示

替换refundNotifyUrl所在一行的内容

参考:https://blog.csdn.net/qq_34110120/article/details/107252815


问题3:将空值赋值给变量,shell脚本执行中断

现象:最开始写了一段逻辑,如图

目的是 看data1里面存不存在experimentInfo这个关键词,如果存在的话,就走if里面。所以validData预期就会存在为空的情况,而为空的时候,就意味着将一个空值赋值给变量,执行不会报错,但是逻辑就不会再往validData后面的执行。然后就换了下面这种写法,就可以继续往下正常执行逻辑

用 -n 的方式去判断字符串是否为空,-z 是字符串为空,-n 是字符串不为空。

参考链接:https://www.jb51.net/article/165137.htm


问题4:sed: 1: command a expects \ followed by text

由于mac系统与linux系统下sed用法的差异,mac下,-i 参数之后指定的字符串是用来指定备份文件的后缀名,如果不想备份文件,那么-i参数也需要指定一个空字符串

解决方案1:sed -i '' 's/apple/mac/g' full-path-file ——> 不好使

解决方案2:调整mac下sed的用法,使其与linux一致,在mac上安装gnu-sed

brew install gnu-sed

alias sed=gsed

你可能感兴趣的:(【Shell】shell脚本报错汇总)