2011-12-16 5 views
3

У меня есть следующие функции: BashBash сравнение строк не работает

checkForUpdates() { 
    checkLatest 
    ret=$? 
    if [ $ret != 0 ]; then 
     return $ret 
    fi 
    count=0 
    for i in $(ssh [email protected]$__updatehost "ls $__updatepath/*${latest}*"); do 
     file="${i##$__updatepath}" 
     echo "$file" >> $__debuglog 
     if [ -f $__pkgpath/$file ]; then 
      remoteHash=$(ssh [email protected]$__updatehost "md5sum -b < $__updatepath/${file}") 
      localHash=$(md5sum -b < $__pkgpath/$file) 
      echo "${remoteHash:0:32} = ${localHash:0:32}" >> $__debuglog 
      if [ "${remoteHash:0:32}" != "${localHash:0:32}" ]; then 
       files[$count]=$file 
       count=$(($count + 1)) 
       echo "Hashes not matched, adding $i" >> $__debuglog 
      fi 
     else 
      files[$count]=$file 
      count=$(($count + 1)) 
      echo "$file missing" >> $__debuglog 
     fi 
    done 

    # Verify that the files array isn't empty. 
    if [ $count != 0 ]; then 
     return 0 
    else 
     return 33 
    fi 
} 

По какой-то причине, то сравнение/localHash remoteHash всегда возвращает истину. Я добавил эхо, чтобы увидеть значения хэшей, и они определенно разные, и я не могу понять, где я ошибаюсь. Я пробовал разные операторы без успеха, и это сводит меня с ума!

+0

Попробуйте использовать 'bash -x '. – mkb

+0

К сожалению, я активно использую диалог с этим скриптом, и он продолжает удалять выходные данные. делает -x посылает в stdout или stderr? Если это stderr, я могу передать его в файл, на который я верю. –

+0

Ничего, это stderr. –

ответ

3

это не относится к вашему вопросу, но более из общих рекомендаций, первый и самый важный you shouldn't parse the output of ls использовать вместо find -print0 вот пример: http://mywiki.wooledge.org/BashFAQ/001

также рассмотреть возможность использования [[ вместо [ См: http://mywiki.wooledge.org/BashFAQ/031

в настоящее время касающийся вашего кода, эта деталь:

checkLatest 
ret=$? 
if [ $ret != 0 ]; then 
    return $ret 
fi 

может быть написана просто:

checkLatest || return 

и вам не нужно, чтобы сохранить счетчик на индекс массива, если вы инициализировать вар, как пустой массив как files=(), то вы можете добавлять элементы к нему с files+=("$file") вы можете получить счетчик с "${#files[@]}"

+0

Большое спасибо за совет. К сожалению, я больше не выделяю время для поддержки сценариев, но я обязательно буду учитывать их для последующих проектов. –

Смежные вопросы