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