• 运行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哈。

     

     

    专业从事搬砖多年,还是在继续搬砖中,厚积薄发~
  • 相关阅读:
    牛客题霸NC15求二叉树的层序遍历Java题解
    牛客题霸NC105二分查找Java题解
    .net基本性本能优化问题
    urlRewriter
    元数据MetaData
    asp.net整体运行机制详解
    asp.net整体运行机制
    asp.net页面从初始化到卸载事件顺序
    Spring表达式语言之SpEL
    Spring 学习笔记(三)之注解
  • 原文地址:https://www.cnblogs.com/Crazy-Liu/p/14812301.html
Copyright © 2020-2023  润新知