2013-12-26 8 views
1

Мой код:Сравнение строк не работает должным образом

x=$(awk -v i=$h -v j=17 'FNR == i {printf "%s ", $j}' newiptables.log) 
s="SPT=80" 

Файл журнала ссылка является:

Dec 26 09:17:51 localhost kernel: IN=eth0 OUT= MAC=00:10:c6:a8:da:68:00:90:7f:9c:50:5a:08:00 SRC=198.252.206.16 DST=10.128.1.225 LEN=313 TOS=0x00 PREC=0x00 TTL=64 ID=59334 PROTO=TCP SPT=80 DPT=56506 WINDOW=46535 RES=0x00 ACK PSH URGP=0 
Dec 26 09:17:52 localhost kernel: IN=eth0 OUT= MAC=00:10:c6:a8:da:68:00:90:7f:9c:50:5a:08:00 SRC=198.252.206.16 DST=10.128.1.225 LEN=1440 TOS=0x00 PREC=0x00 TTL=64 ID=47303 PROTO=TCP SPT=80 DPT=56506 WINDOW=46535 RES=0x00 ACK URGP=0 
Dec 26 09:17:52 localhost kernel: IN=eth0 OUT= MAC=00:10:c6:a8:da:68:00:90:7f:9c:50:5a:08:00 SRC=198.252.206.16 DST=10.128.1.225 LEN=1440 TOS=0x00 PREC=0x00 TTL=64 ID=47559 PROTO=TCP SPT=80 DPT=56506 WINDOW=46535 RES=0x00 ACK URGP=0 

Тогда следующее условие в сценарии необходимо проверить это:

if [[ "$x" == "$s" ]] 
then 
< process if condition is true> 
else 
< process if condition is false> 
fi 

Условие if не работает

+2

Есть вопрос здесь ? – OmnipotentEntity

+0

Извините, если цикл не работает – Sanshayan

+0

Что вы пытаетесь сделать, точно? Извлечь аргумент 'SPT'? – OmnipotentEntity

ответ

1

Необходимые исправления:

s="SPT=80" # Not STP=80 

Это так было зафиксировано в этом вопросе.

Возможно необходимо исправить:

if [[ "$x" == "$s" ]] # Space between if and [[ highly recommended 
then : it matches 
else : it does not match 
fi 

Как было отмечено в комментариях, использование "%s " с завершающим пробелом в awk сценария означает, что конечные пробелы сохраняются в "$x" и это нарушит сравнение с "$s".

+0

спасибо !! Джонатан, я пробовал, что это не сработало – Sanshayan

+1

Вы эхом отдавали «$ x» и «$ s», чтобы увидеть, что они содержат? Если нет, сделайте это - или запустите скрипт, используя 'bash -x script'. Обратите внимание, что 'echo' должен ограничивать переменные:' echo '[$ x] "" [$ s] "', где квадратные скобки служат для обозначения начала и конца каждой переменной. Вполне возможно, что конечная заготовка вызывает проблемы. –

3

Соблюдайте вашу awk команды:

printf "%s ", $j 

Вы печатаете косое пространство, благодаря которому тест if [[ "$x" == "$s" ]] терпит неудачу.

Устранить пространство от printf:

printf "%s", $j 

В качестве альтернативы можно использовать binary operator=~ (в зависимости от ваших потребностей, конечно):

if [[ "$x" =~ "$s" ]] 
+0

еще раз спасибо! он работает – Sanshayan

+0

Или вместо 'printf' просто используйте' print $ j'. –

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