Як перевірити змінну, повернуту з MySQL в bash?


2

Мені потрібно запустити збережену процедуру за допомогою MySQL з bash. Збережена процедура повертає змінну, і мені потрібно перевірити значення змінної в bash, щоб відобразити її відповідно. Якщо я повторюю зміну безпосередньо, вона відображає значення правильно, але якщо я перевіряю значення за допомогою if, ifумова ніколи не виконується, і я не отримую "ТАК" у наступному випадку.

Щоб зробити все просто, я спростив файл bash таким чином:

result=$(mysql -h localhost -u$MYSQL_USER -p$MYSQL_PASSWORD -s -e "set @myVarible = 'YES';select @myVarible" $MYSQL_DATABASE)

if [[ $result == 'YES' ]] ; then
    echo YES
fi

Вихід echo -n "$result" | od -ctx1є

0000000   Y   E   S  \r
         59  45  53  0d
0000004

1
Додайте ;раніше fi.
Сайрус

Просто так нам зрозуміло: ваша result=$(mysql …)команда працює і echo $resultвиводить YES, але if … fiкоманда нічого не виводить? Є чи echo $resultвихід YESабо 'YES'? Що станеться, якщо ви поставите $resultподвійні лапки (наприклад, echo "$result")?
G-Man

дякую Сайрус, але це робить те саме.
Віктор

1
if [[ $result =~ YES ]] ; then
Сайрус

1
Пост виводу echo -n "$result" | hexdump -C.
Сайрус

Відповіді:


0

Вихід із даних echo -n "$result" | od -ctx1показує, що ваша resultзмінна отримує повернення каретки в кінці. (Це показано , як \rі 0dв od -ctx1вихідний.) Наскільки хто - то, це просто ще один персонаж, і він не відповідає YESбільше ніж YESKабо YESSбуде. Можливо, найкращим рішенням вашої проблеми є зміна mysqlкоманди не виводити повернення каретки. Але я не знаю, як це зробити, і я знаю, як зафіксувати результат після того, як ви потрапили в оболонку.

Після вашої mysqlкоманди скажіть

result="${result%$'\r'}"

Конструкція

$ { змінне ім'я % string }

(де для ясності додаються пробіли) розширюється до значення змінної, при цьому рядок видаляється з кінця. Наприклад, якщо $vehicleє carriage, то ${vehicle%riage}є car.

$ ' string '

- це те саме, що (цитується рядок), за винятком того, що рядок може містити послідовності втечі, як для і повернення каретки. Отже, це значення, коли повернення вагона видалено з кінця. Тепер ви зможете протестувати його з кодом .'string'\tTab\r${result%$'\r'}$result[[ $result == 'YES' ]]


Дякую за допомогу. те, як ви це поясните, відмінне, дуже вражаюче.
Віктор

Чи працює ця відповідь для вас? Якщо це так, будь ласка, “прийміть” його, натиснувши на галочку. ( Що мені робити, коли хтось відповість на моє запитання? )
G-Man
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.