Сравнение двух строк вместе

У меня есть названный массив sev[w] где w колеблется от 1 до 21.
массив содержит следующее:

CRITICAL 
INFORMATIONAL 
CRITICAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
CRITICAL 
CRITICAL 
INFORMATIONAL 
INFORMATIONAL 
CRITICAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 
INFORMATIONAL 

Я должен сравнить строку и распечатать shte

if [ "${sev[0]}" == CRITICAL ]
 then 
    echo "shte"
fi

sev[0] имеет CRITICAL сохраненный в нем
Однако это не работает.
Спасибо за помощь!

Править
Код bashscript.
mibwithtraps.

0
задан 17 June 2015 в 12:49

3 ответа

Я предполагаю Ваш mibwithtraps, файл был создан с помощью Windows и поэтому имеет \r\n окончания строки. Это повредило бы Ваш сценарий:

$ printf 'foo\r\n' | while read a; do 
    [[ "$a" == "foo" ]] && echo 'Matches!' || echo 'No match!'; 
done
No match!

, Как Вы видите выше, эти \r, включен в переменную, таким образом, она на самом деле не соответствует, если Вы не включаете ее в свой тест:

$ printf 'foo\r\n' | while read a; do 
    [[ "$a" == "foo" 

Это - что-то, что всегда необходимо принимать во внимание при контакте с файлами, созданными на другой ОС. Простой способ проверить состоит в том, чтобы передать первую строку от Вашего файла до od -c. При выполнении этого на тексте от pastebin (должен загрузить оригинал, скопировать/вставить не будет работать), я добираюсь:

$ head -1 dmvHuedP.asc | od -c
0000000       a   d   a   p   t   e   c   .   m   i   b   ,   s   C   S
0000020   I   S   m   a   r   t   1   ,   .   1   .   3   .   6   .   1
0000040   .   4   .   1   .   7   9   5   .   2   .   5   .   0   .   1
0000060   0   1   ,   C   R   I   T   I   C   A   L   ,  \r  \n
0000076

Так, эти \r была действительно проблема. В следующий раз можно использовать dos2unix для удаления их:

$ head -1 dmvHuedP.asc | dos2unix | od -c
0000000       a   d   a   p   t   e   c   .   m   i   b   ,   s   C   S
0000020   I   S   m   a   r   t   1   ,   .   1   .   3   .   6   .   1
0000040   .   4   .   1   .   7   9   5   .   2   .   5   .   0   .   1
0000060   0   1   ,   C   R   I   T   I   C   A   L   ,  \n
0000075

Просто работает

dos2unix file > newfile

, С другой стороны, можно использовать стандартные инструменты UNIX:

tr -d  '\r' < file > newfile
sed -i 's/\r//g' file
\r' ]] && echo 'Matches!' || echo 'No match!'; done Matches!

Это - что-то, что всегда необходимо принимать во внимание при контакте с файлами, созданными на другой ОС. Простой способ проверить состоит в том, чтобы передать первую строку от Вашего файла до od -c. При выполнении этого на тексте от pastebin (должен загрузить оригинал, скопировать/вставить не будет работать), я добираюсь:

$ head -1 dmvHuedP.asc | od -c
0000000       a   d   a   p   t   e   c   .   m   i   b   ,   s   C   S
0000020   I   S   m   a   r   t   1   ,   .   1   .   3   .   6   .   1
0000040   .   4   .   1   .   7   9   5   .   2   .   5   .   0   .   1
0000060   0   1   ,   C   R   I   T   I   C   A   L   ,  \r  \n
0000076

Так, эти \r была действительно проблема. В следующий раз можно использовать dos2unix для удаления их:

$ head -1 dmvHuedP.asc | dos2unix | od -c
0000000       a   d   a   p   t   e   c   .   m   i   b   ,   s   C   S
0000020   I   S   m   a   r   t   1   ,   .   1   .   3   .   6   .   1
0000040   .   4   .   1   .   7   9   5   .   2   .   5   .   0   .   1
0000060   0   1   ,   C   R   I   T   I   C   A   L   ,  \n
0000075

Просто работает

dos2unix file > newfile

, С другой стороны, можно использовать стандартные инструменты UNIX:

tr -d  '\r' < file > newfile
sed -i 's/\r//g' file
2
ответ дан 1 August 2019 в 10:04

Согласно Ваш комментарий , у Вас, вероятно, был некоторый странный символ где-нибудь в Вашем сценарии.

самое простое решение в этом случае, имея входной файл и сценарий было отправлено на paste.ubuntu.com и их убранный после загрузки, , поскольку я предложил Вас в комментариях и , как Вы сделали , должен удалить mibwithtraps и bashscript воссоздание их вставка копии версия на paste.ubuntu.com.

1
ответ дан 1 August 2019 в 10:04

Правильный синтаксис:

if [[ "${sev[1]}" == "CRITICAL" ]]; then
   echo "shte"
fi

Смотрите для Усовершенствованного Пишущего сценарий Bash Guide:Arrays

ОБНОВЛЕНИЕ:

Я делаю тест. Я думаю, что Вы отсутствуете с номерами массива sev1, не очень важно, это ИНФОРМАЦИОННО. sev [0] все еще имеют CRTITICAL и не пустые

Здесь простой тест:

sev=( CRITICAL INFORMATIONAL )

if [[ "${sev[0]}" == "CRITICAL" ]]; then    echo "shte"; fi

вывод:

 shte

Теперь:

if [[ "${sev[1]}" == "CRITICAL" ]]; then    echo "shte"; fi

вывод Пуст

2
ответ дан 1 August 2019 в 10:04

Другие вопросы по тегам:

Похожие вопросы: