bash脚本,如果语句发出

时间:2019-03-25 09:43:16

标签: bash if-statement while-loop

我从另一个bash脚本中调用以下脚本来检查文件更改。如果SHA从一次执行更改为下一次执行,则说明Google文档已更新。

该脚本(尝试)接受一个Google驱动器文档ID作为参数,然后尝试几次以获取该信息(因为gdrive随机失败)。结果长了几行,因此脚本会对结果进行SHA运算以获得唯一的简短结果。

它正在工作(当gdrive返回结果时),所以我添加了循环和失败消息,使其更加健壮,但是...

我必须对以下脚本中的if和while语句做错什么,因为即使gdrive信息结果失败,该脚本也只能循环执行一次。同样,当要测试的字符串长度设置为故意短时。

如果我有头发,我会把它拔掉。

#!/bin/bash
maxAttempts=10
minResult=100  # gdrive errors are about 80 characters

# If there was no parameter, give an error  
[[ -z $1 ]] && errorMsg="Error: no google docs ID provided as a parameter" && echo $errorMsg && exit 0

# With an ID, get the file info, which includes a timestamp and return the SHA
attemptCount=0
strLength=1 
while [[ "$strLength" < "$minResult" && "$attemptCount" < "$maxAttempts" ]];
do
    ((attemptCount++))
    fileInfo="$(gdrive info $1)"
    #fileInfo="TESTXXX" # use for testing different message lengths
    strLength=${#fileInfo}  # if under 100, the grive attempt failed
    timeStamp="$(echo -n $fileInfo | sha256sum )"
    echo $fileInfo
    if [[ $strLength < $minResult ]]; then
        sleep 10
        timeStamp="Failed to get timestamp after $attemptCount tries, or wrong ID provided"
    fi
done

#return the timestamp
echo $timeStamp

在if语句的末尾,我尝试了单方括号和双方括号,在变量-gt和<周围加上了双引号,甚至输入了数值7和100来尝试强制该部分执行和它失败了。我在其他运行脚本中具有完全相同的if语句。我要疯了。我没看错吗?请帮助。

1 个答案:

答案 0 :(得分:1)

对数值运算使用圆括号:

if (( strLength < minResult )); then

但是请确保变量包含数值。可以使用declare

declare -i strLength
declare -i minResult