今天將公司服務(wù)器上的腳本拿到自己筆記本上運(yùn)行時(shí)出錯(cuò),set -x追蹤發(fā)現(xiàn)是在一個(gè)變量的自增運(yùn)算時(shí)發(fā)生錯(cuò)誤,出錯(cuò)部分的腳本大概是這樣:
#! /bin/sh param=0 echo $((param++))錯(cuò)誤信息:$ ./test.sh ./test.sh: 3: ./test.sh: arithmetic exPRession: expecting primary: "param++"將腳本中的(())換成let命令后依然出錯(cuò):#! /bin/sh param=0 let param++echo $param錯(cuò)誤信息:$ ./test.sh ./test.sh: 4: ./test.sh: let: not found腳本在服務(wù)器上正常運(yùn)行,但是在自己筆記本上出錯(cuò),那么肯定是筆記本上的運(yùn)行環(huán)境與服務(wù)器不同造成的。我的筆記本裝的是Ubuntu 16.04,而服務(wù)器上是centos,這也許就是問題的突破點(diǎn)。后來經(jīng)過查找,發(fā)現(xiàn)Ubuntu中/bin/sh鏈接默認(rèn)指向的是dash shell,而服務(wù)器上指向的是bash shell。dash是一個(gè)小巧的shell,他的功能自然也就沒有bash強(qiáng)大,上述問題就是有與dash shell不支持++運(yùn)算和let命令造成的。找到了原因,解決方案就非常簡(jiǎn)單了。通過在腳本中直接指明使用bash shell即可,將腳本首行改為:
#! /bin/bash# 腳本內(nèi)容# ... ... 或者直接將/bin/sh指向bash即可解決問題,在終端輸入命令:$: sudo ln -sf /bin/bash /bin/sh
新聞熱點(diǎn)
疑難解答
圖片精選