bash脚本在变量赋值时崩溃

时间:2015-10-07 15:49:07

标签: bash variables variable-assignment

我正在编写一个bash脚本来自动化一些opencv代码,我需要多次运行一系列变量。 出于某种原因,当我尝试将0分配给flag变量时,我的bash脚本不断崩溃。 我也在if循环之外尝试了这个,它也会导致脚本崩溃。

#!/bin/bash
set -e

# Build most recent code
cd build2/
cmake ..
make

Scale=(9 9)

inputType="scale"

flag=1
counter=0
for i in ${Scale[@]}; do
    echo iteration: $counter

    if [ $counter -eq 0 ]
    then
      echo first iteration
      let flag=0 #Crashes Here
      echo after assignment $flag

    else
      echo not first iteration
      let flag=1 #Doesn't crash here
      echo after assignment $flag
    fi

    echo starting program
    #Note 1.inputValue  2.Input Type 3.firstGo
    ./multiDimen ${i} $inputType $flag

    echo Test Type is: $inputType
    let counter=counter+1
done
echo Done

有什么理由说这应该是这样的吗?

3 个答案:

答案 0 :(得分:3)

使用set -e,结果为零的算术评估是您必须处理的“错误”。用普通赋值替换有问题的let会删除算术上下文,这可能就是你应该做的。

您仍应查看脚本的其余部分以了解类似问题,或放弃使用set -e,尤其是如果您不是Bash脚本专家。特别是,如果您正在测试的程序可能返回非零退出代码,那么仍然会终止该脚本。

答案 1 :(得分:0)

尝试取走let并使用简单的' ='赋值,let通常只用于算​​术,它实际上与(())相同。

答案 2 :(得分:0)

man set -e    如果一个简单的命令以非零状态退出,则立即退出,除非    失败的命令是until或while循环的一部分,是while的一部分    if statement,&& amp;&或||列表,或命令的返回状态    正在使用! -o errexit

man let 每个表达式都是要计算的算术表达式。如果最后一个表达式的计算结果为0,则返回1;否则返回0。

尝试删除set -e