2015-07-26 2 views
0

Я просто хотел, чтобы сделать действительно простое сравнение между 2 строки в Bash:сравнение Bash между строками - равными, но не равны для него

stat=`curl -Is $url | head -n 1` 
echo $stat 
if [ "$stat" = "HTTP/1.1 200 OK" ];then 
    echo "$symbol is OK" 
    echo $stat 
    valide=$(($valide + 1)) 
else 
    echo "$symbol is 404" 
    echo $stat 
    err=$(($err + 1)) 
fi 

Но даже если «стат» полностью совпадают, результат пребывания что он не равен:

HTTP/1.1 200 OK 
AAA is 404 
HTTP/1.1 200 OK 

Как я могу изменить свой код?

У меня также было много ошибок с «/» («неожиданный оператор», ...) в строке перед тем, как приступить к этому образцу кода, и я пробовал много разных подходов, таких как содержит («200») с тем же результатом.

Спасибо заранее!

+0

Попробуйте 'Эхо "| $ стат |"'. Готов поспорить, есть лишние пробелы. – Barmar

+2

@Barmar Вероятно, возвращение задней каретки. – melpomene

+0

@melpomene Да, это точно, что это такое – Barmar

ответ

3

Вывод curl включает в себя CR в конце строк, его необходимо удалить.

stat=`curl -Is $url | head -n 1 | tr -d '\r'` 
+0

О, я не знал этого, это сработало! Благодаря ! – toshiro92

0

Если вы думаете, что может быть завершающие символы (которые вы не возражаете), а затем использовать [[ шаблону вместо:

# Try not to use `` anymore, backticks are hard to read 
stat=$(curl -Is $url | head -n 1) 

# When debugging, use some sort of delimiter which shows leading or trailing whitespace  
echo "<$stat>"       

# Variables inside [[ don't need to be quoted 
# Adding a trailing * allows optional trailing characters 
if [[ $stat == "HTTP/1.1 200 OK"* ]];then 
    echo "$symbol is OK" 
    echo $stat 
    $((valide++))   # You don't need the "$", just the variable name 
else 
    echo "$symbol is 404" 
    echo $stat 
    $((err++))    # using a $ in (()) can change the scan sequence 
fi 
+0

Спасибо за советы, я изменил некоторые вещи в своем коде. – toshiro92

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