写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脚本遇坑总结的主要内容,如果未能解决你的问题,请参考以下文章