У меня есть названный массив 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.
Я предполагаю Ваш 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
Согласно Ваш комментарий , у Вас, вероятно, был некоторый странный символ где-нибудь в Вашем сценарии.
самое простое решение в этом случае, имея входной файл и сценарий было отправлено на paste.ubuntu.com и их убранный после загрузки, , поскольку я предложил Вас в комментариях и , как Вы сделали , должен удалить mibwithtraps
и bashscript
воссоздание их вставка копии версия на paste.ubuntu.com.
Правильный синтаксис:
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
вывод Пуст