運行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哈。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM