BASH脚本在IF期间因未知原因结束

BASH脚本在IF期间因未知原因结束,bash,shell,command-line,jmeter,Bash,Shell,Command Line,Jmeter,我有一个bash脚本,它运行一系列Jmeter脚本。 我刚刚修改了脚本,因此它只有在正确设置环境变量(本例中为2个变量之一)的情况下才会运行 如果使用第一个环境,脚本将结束。 如果使用第二个环境选项,脚本将正确运行并完成 完整脚本: #!/bin/bash if [ "$#" -ne 4 ]; then echo "Parameters required: version environment plc_username plc_password" else cd $HOME/w

我有一个bash脚本,它运行一系列Jmeter脚本。 我刚刚修改了脚本,因此它只有在正确设置环境变量(本例中为2个变量之一)的情况下才会运行

如果使用第一个环境,脚本将结束。 如果使用第二个环境选项,脚本将正确运行并完成

完整脚本:

#!/bin/bash
if [ "$#" -ne 4 ]; then
    echo "Parameters required: version environment plc_username plc_password"
else
    cd $HOME/workspace/OptimumStart/resources/jmeterrun/

    if [[ "$2" =~ ^hibagon ]]; then
        echo 'doing hibagon'
        echo 'using version '$1 
        source ./hibagon_env.sh $1 
        echo 'done hibagon env'
    elif [[ "$2" =~ ^kameosa ]]; then
        echo 'doing kameosa'
        echo 'using version '$1 
        source ./kameosa_env.sh $1 
        echo 'done kameosa env'
        if [[ "$2" =~ ^hibagon ]] || [[ "$2" =~ ^kameosa ]]; then
            echo "Continuing to tests"
            source ./user_env.sh $3 $4
            echo 'done user env'
            export jmtestFeature=DEV15298
            env | grep jm
            $HOME/apache-jmeter-2.11/bin/jmeter -n -t $HOME/workspace/OptimumStart/resources/jmeterscripts/DEV15298_Feedback/QA3 1985_AllowCoolingZwaveFeedback.jmx
            echo 'done Allow Cooling Tests'
            $HOME/apache-jmeter-2.11/bin/jmeter -n -t $HOME/workspace/OptimumStart/resources/jmeterscripts/DEV15298_Feedback/QA3 1986_WarmingZwaveFeedback.jmx
            echo 'done Warming Tests'
            $HOME/apache-jmeter-2.11/bin/jmeter -n -t $HOME/workspace/OptimumStart/resources/jmeterscripts/DEV15298_Feedback/QA3 1987_MaintainingZwaveFeedback.jmx
            echo 'done Maintaining Tests'
            $HOME/apache-jmeter-2.11/bin/jmeter -n -t $HOME/workspace/OptimumStart/resources/jmeterscripts/DEV15298_Feedback/QA31993_PreHeatingZwaveFeedback.jmx
            echo 'done Pre Heating Tests'
            $HOME/apache-jmeter-2.11/bin/jmeter -n -t $HOME/workspace/OptimumStart/resources/jmeterscripts/DEV15298_Feedback/QA-32651_PreZwaveOccChange.jmx
            echo 'Done Occupancy change test'
            $HOME/apache-jmeter-2.11/bin/jmeter -n -t $HOME/workspace/OptimumStart/resources/jmeterscripts/Createtree.jmx
            echo 'Created tree of results'  
        else
            echo "Unkown server, stopping tests"
        fi
    fi
fi
似乎给我带来问题的部分是

if [[ "$2" =~ ^hibagon ]]; then
  echo 'doing hibagon'
  echo 'using version '$1 
  source ./hibagon_env.sh $1 
  echo 'done hibagon env'
elif [[ "$2" =~ ^kameosa ]]; then
  echo 'doing kameosa'
  echo 'using version '$1 
  source ./kameosa_env.sh $1 
  echo 'done kameosa env'
如果使用3种不同的环境从命令行运行,则会发生以下情况

./jmeterrun2.sh testversion kameosa  shaun shaun
doing kameosa
using version testversion
done kameosa env
Continuing to tests
done user env
jmtestFeature=DEV15298
OLDPWD=/home/shaunb/workspace/OptimumStart/resources/jmeterrun
jmuser=shaun
jmpass=shaun
jmPort=443
PWD=/home/shaunb/workspace/OptimumStart/resources/jmeterrun
jmtestVersion=testversion
jmHost=kameosa.passivonline.com
并继续运行脚本

./jmeterrun2.sh testversion hibagon  shaun shaun
doing hibagon
using version testversion
done hibagon env
这就到此为止,什么也不做

./jmeterrun2.sh testversion noserver  shaun shaun
这没用

./jmeterrun2.sh testversion noserver  shaun shaun

如果您需要更多信息,请告诉我。

我已经将您的脚本分解成一个函数库,我称之为jmFunctionLib。您可以在库中选择“源”或“点(.)”。e、 g:

ittoolbox.$ . ./jmFunctionLib
ONLY executable statement
USAGE: myJmrun version environment plc_username plc_password
我希望你能用这个。这种风格的目的是开发一种实践,帮助您避免“这个脚本有什么问题”类型的问题。怎么做

  • 通过提供可测试的中间代码块(函数)

  • 通过折叠长段代码,使嵌套难以遵循

  • 通过将重复使用的命令收集成更具语义的形式, e、 g.“myJmaster”函数很可能成为“main”

  • 维护变得容易多了

  • 享受吧!函数库:

    function comment
    { 
        echo $* 1>&2
    }
    function quietly
    { 
        "$@" 2> /dev/null
    }
    function myJminit
    {
        comment USAGE: myJmrun version environment plc_username plc_password
        quietly comment 1. put all announcements on stderr as comments;
        quietly comment 2. collapse into functions;
        quietly comment 3. recognize parallel logic
    }
    function myJmeter
    { 
        $HOME/apache-jmeter-2.11/bin/jmeter -n -t \
        $HOME/workspace/OptimumStart/resources/jmeterscripts/"$1";
        comment done $(echo "$1"|sed 's/.*_//; s/.jmx$//') Tests
    }
    function myJmfeed
    { 
        myJmeter DEV15298_Feedback/"$1"
    }
    function myJmRun
    { 
        [[ $# -lt 4 ]] && { 
            myJminit
            return
        };
        cd $HOME/workspace/OptimumStart/resources/jmeterrun/;
        case $2 in 
            *hibagon* | *kameosa*)
                myJmaster "$@"
            ;;
            *)
                comment Unkown server, stopping tests
            ;;
        esac
    }
    function myJmaster
    { 
        comment "doing $2";
        comment "using version $1";
        source ${2}_env.sh;
        comment done $2 env;
        comment contintuing to tests;
        source ./user_env.sh $3 $4;
        comment done user env;
        export jmtestFeature=DEV15298;
        comment $(env | grep jm );
        myJmfeed "QA3 1985_AllowCoolingZwaveFeedback.jmx";
        myJmfeed "QA3 1986_WarmingZwaveFeedback.jmx";
        myJmfeed "QA3 1987_MaintainingZwaveFeedback.jmx";
        myJmfeed "QA31993_PreHeatingZwaveFeedback.jmx";
        myJmfeed "QA-32651_PreZwaveOccChange.jmx";
        myJmeter Createtree.jmx
    }
    comment ONLY executable statement; myJminit
    

    您在突出显示的块中缺少一个
    fi
    。@Mat我将一个fi从脚本底部移到了echo“done kameosa env”之后,这修复了我的问题,感谢可能的重复