2015-12-16 2 views
-3

У меня есть Баш скрипт:ошибка "[: слишком много аргументов" от Баш скрипт

#!/bin/bash 
pathToTestCasesFile=$1 

while IFS=';' read -r col1 col2 
do 

    if [[ $col1 == V[0-9]:* ]]; then 
     echo "decrypt" 
     if [[ "$(decrypt "$col1")" == "$col2" ]] ; then 
     echo "$col1 is equal to $col2" 
     else 
     echo "$col1 is not equal to $col2" 
     fi 
    else 
     echo "encrypt" 
     if [[ "$(encrypt $col1)" == "$col2" ]] ; then 
     echo "$col1 is equal to $col2" 
     else 
     echo "$col1 is not equal to $col2" 
     fi 
    fi 

done < $pathToTestCasesFile 

exit 0 

Вот тестовый файл:

alex;V1:IVjd9qcAbUrR954gyPDbKw== 
V1:IVjd9qcAbUrR954gyPDbKw==;alex 

Результат выглядит следующим образом:

encrypt 
alex is not equal to V1:IVjd9qcAbUrR954gyPDbKw== 
decrypt 
V1:IVjd9qcAbUrR954gyPDbKw== is not equal to alex 
decrypt 

Но выход должен сказать, что все равно.

Я уверен, что после того, как команды дешифруют, значение равно другому. Я тестировал его отдельно.

Может быть, есть проблема с сравнениях ..

Большое спасибо за помощь.

+0

Команда говорит мне строку 23: $ pathToTestCasesFile: неоднозначная перенаправление. Может быть, $? –

+0

Ok bro, вам нужно добавить двойные кавычки в переменной pathToTestCasesFile «$ pathToTestCasesFile:» –

+0

отправить образец из содержимого файла './AutomaticRegressionTest' –

ответ

1

Это должно работать:

#!/bin/bash 

while IFS=, read -r col1 col2 
do 
    echo "I got|$col1|$col2|" 

    if [[ "$col1" =~ V.:.* ]]; then 
     echo "decrypt" 
     if [[ "$(decrypt "$col1")" == "$col2" ]] ; then 
      echo "[$col1] is equal to [$col2]" 
     else 
      echo "[$col1] is not equal to [$col2]" 
     fi 
    else 
     echo "encrypt" 
     if [[ "$(encrypt "$col1")" == "$col2" ]] ; then 
      echo "[$col1] is equal to [$col2]" 
     else 
      echo "[$col1] is not equal to [$col2]" 
     fi 
    fi 
done < "$pathToTestCasesFile" 

разделителя полей используется в , запятой - как в вашем коде. В данных примера вы найдете ;. Если вам нужно ;, измените IFS=, на IFS=';'.

+0

Да, это cmd. но ваш ответ не сработал для меня. – Mansouritta

+4

«Не работает для меня» не помогает. Что вы ожидаете, и что произошло вместо этого? – chepner

+0

Я обновил сообщение, чтобы вы теперь могли видеть тестовые данные. И когда я применил ваше решение, выход был: | got: Вход; Выход Erwarteter не равен выходу | got: Alex; V1: sdfsfsfsff не равно f | получено: V1: sdfsfsfsff; Alex не равно x | got: Moage; V1: sdfgjhhkdf не равно df Так что, похоже, скрипт разбивает String на многие строки. Но это не должно. – Mansouritta

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