我在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