скрипт bash, если выписка - PullRequest
0 голосов
/ 25 марта 2019

Я вызываю следующий скрипт из другого скрипта bash для проверки изменений файла. Если SHA изменяется от одного исполнения к другому, документ Google обновляется.

Сценарий (пытается) принять идентификатор документа на диске Google в качестве параметра, а затем несколько раз пытается получить информацию (поскольку случайный сбой gdrive). Результаты имеют длину в несколько строк, поэтому сценарий выполняет SHA для результатов, чтобы получить уникальный короткий результат.

Это работало (когда gdrive возвращал результаты), поэтому я добавил цикл и сообщение об ошибке, чтобы сделать его немного более устойчивым, но ...

Должно быть, я что-то не так делаю с операторами if и, возможно, while в следующем сценарии, потому что сценарий циклически повторяется только один раз, даже когда результаты gdrive info не срабатывают. Также, когда строка для проверки длины установлена ​​на что-то намеренно короткое.

Если бы у меня были волосы, я бы их выдернул.

#!/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 в других действующих скриптах, которые выглядят точно так же. Я схожу с ума. Что я не вижу не так? Помогите, пожалуйста. </p>

1 Ответ

1 голос
/ 25 марта 2019

Используйте круглые скобки для числовых операций:

if (( strLength < minResult )); then

Но убедитесь, что переменные содержат числовые значения. Это можно сделать с помощью declare:

declare -i strLength
declare -i minResult
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...