写shell脚本遇坑总结

Posted 小运维Session

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写shell脚本遇坑总结相关的知识,希望对你有一定的参考价值。

      写了一天的脚本,遇坑无数,今天继续装逼......


------------------------------

首先来个刺激的,请观察下面两个域名的区别。

h5alpha.bestpay.com.cn     

--------------------------------

h5alpha.besptay.com.cn


晚上上线的时候,研发把字母拼错导致无法访问,刚开始没发现这个问题,习惯性的字母顺序果然不影响阅读.....下次需要再仔细一点了,低级错误年年有,今年特别多。


在shell 脚本中 if 判断 条件 常见的有 “=” ,“!=”, "-eq" , "-nq"


“=”  "-eq" 

这两个都有相等判断的功能,以前没仔细研究过这个问题,今天在写脚本时就发现问题了


DEBUG报错:

+ '[' insurance-h5  != common -a 1=1 ']'

/tools/script/release/function.shnew: line 108: [: insurance-h5: integer expression expected

才发现这个问题,

整数变量表达式用"-eq" ,"-nq"

字符串表达式用“=”,“!=”


下面是今天在写静态文件发布脚本时,解决如何判断两个字符串是否有包含关系时所用到的几种方法:

方法一:利用grep查找

strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
 then
   echo "包含"
else
   echo "不包含"
fi

先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果

如果结果不为空,说明strA包含strB。如果结果为空,说明不包含。

这个方法充分利用了grep 的特性,最为简洁

方法二:利用字符串运算符

strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then echo "包含"
else echo "不包含"fi

利用字符串运算符 =~ 直接判断strA是否包含strB,此方法比第一种较优

方法三:利用通配符

A="helloworld"
B="low"
if [[ $A == *$B* ]]
then echo "包含"
else echo "不包含"fi

用通配符*号代理strA中非strB的部分,如果结果相等说明包含,反之不包含。


综合三种方法来说,我选择了第二种,代码间接,命令执行次数少,方法最优。


-------------------------------------

装逼结束,小运维下班了



以上是关于写shell脚本遇坑总结的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

shell脚本中28个特殊字符的作用简明总结

bootstrap4栅格布局遇坑总结

bootstrap4栅格布局遇坑总结

win10家庭版docker安装+遇坑

shell 脚本 片段