我在jenkins傳遞參數運行shell腳本構建java部署時報錯,報錯為:
同樣這個腳本在另一台機器jenkins上執行順利,報錯顯示腳本20行報錯
#!/bin/sh
. /etc/profile
env=$1
javastart="$2"
project_name=xxxxxx
jar_name=${project_name}.jar
jar_dir=$WORKSPACE/$project_name/target
remote_user=deploy
remote_port=91000
remote_uploaddir=/data/project/jar_upload/
remoteshell_path=/data/project/jenkins_shell/deploy.sh
#####ip#####
ip=$3
n=`echo $ip | awk -F ',' '{print NF}'`
for i in `seq 1 $n`
do
remote_server[$i]=`echo $ip | awk -v z="$i" -F ',' '{print $z}'` ###20行在這,
done
jenkins項目內執行腳本如下:
解決辦法
腳本功能就是主要用來傳遞參數篩選IP,便於jenkins頁面指定部署機器。,但是在運行至判斷表達式時報錯,無法識別"[[]]"表達式。
最終也找到了問題的解決辦法:bash與sh是有區別的,兩者是不同的命令,且bash是sh的增強版,而"[[]]"是bash腳本中的命令,因此在使用解釋器sh執行時,到了20行remote_server[$i]這個中框號就無法識別,
1、將腳本首行解釋器sh替換為bash命令即可:
#!/bin/sh
更改為:#!/bin/bash
2、jenkins頁面使用sh xxx/xxx/.sh去掉sh后者改為./再或者bash都行
再次執行jenkins構建啟動腳本成功。
如果你恰好也是這個情況或者是sh xxx.sh腳本報錯這個not found的話,可以試下bash xxx.sh,原理都是一樣哈,sh解釋器無法識別[],盡量使用bash哈。
[
參考鏈接:] https://stackoverflow.com/questions/12230690/string-comparison-in-bash-not-found