运行shell脚本时报错"[[ : not found"解决

问题描述

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

 

 

posted @ 2021-05-26 10:32  疯刘小三  阅读(3217)  评论(0编辑  收藏  举报