我从另一个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语句。我要疯了。我没看错吗?请帮助。
答案 0 :(得分:1)
对数值运算使用圆括号:
if (( strLength < minResult )); then
但是请确保变量包含数值。可以使用declare
:
declare -i strLength
declare -i minResult