mknk
@mknk
Разработчик 1С-Битрикс

Почему при сравнении двух строк в bash сравнение постоянно выдает истину?

Друзья, всем привет!

Сразу напишу, что не силен в написании скриптов на bash, но возникла такая необходимость.

Прилагаю простенький пример:
# !/bin/sh
res=$(curl -Isk https://........./api/rest.php | head -n 1 | sed 's/\r//g')
res_string="HTTP/1.1 200 OK"
if [ "$res"="$res_string" ]
then
service nginx status && service httpd status
else
echo "CANSEL"
fi


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

Подскажите куда копать.

UPD:
При тестировании через bash -x получаю следующий вывод:
bash -x script.sh 
++ curl -Isk https://...../api/rest.php
++ head -n 1
++ sed 's/\r//g'
+ res='HTTP/1.1 200 OK'
+ res_string='HTTP/1.1 200 OK'
+ '[' 'HTTP/1.1 200 OK=HTTP/1.1 200 OK' ']'
+ service nginx status
nginx (pid  17277) is running...
+ service httpd status
httpd (pid  17321) is running...


Если res_string поменять на любое значение то все равно будет истина.
Для наглядности:
bash -x script.sh 
++ curl -Isk https://......./api/rest.php
++ head -n 1
++ sed 's/\r//g'
+ res='HTTP/1.1 200 OK'
+ res_string='38942983478239423олвыалодлаывдHTTP/1.1 200 OK'
+ '[' 'HTTP/1.1 200 OK=38942983478239423олвыалодлаывдHTTP/1.1 200 OK' ']'
+ service nginx status
nginx (pid  17277) is running...
+ service httpd status
httpd (pid  17321) is running...
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
kocherman
@kocherman
потому что между[ "$res" = "$res_string" ] ставятся пробелы
Пробел не ставится только при присвоении значения переменной
Например, res=123
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
#!/bin/sh
res=$(curl -lsk -o /dev/ev/null -w "%{http_code}" https://........./api/rest.php)
if [ "$res" = "200" ]; then
  service nginx status && service httpd status
else
  echo "CANCEL"
fi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы