2015-12-18 3 views
0
#!/bin/sh 
# 
# found if this IP is receiving data 
# 
#echo hexIpAdd=`sh convertIPAddressToHex $1` 

hexIpAdd='C0 A8 01 02' 

#`snmpwalk -v 2c -c public 192.168.252.187 .1.3.6.1.4.1.231.7.1.2.2.1.4.7.13.1.1.3301 | grep '$hexIpAdd' | wc -l` 

if [ `snmpwalk -v 2c -c public 192.168.252.187 .1.3.6.1.4.1.231.7.1.2.2.1.4.7.13.1.1.3301 | grep '$hexIpAdd' | wc -l` -gt 0 ]; then 
     echo "Value FOUND!!" 
else 
     echo "Value NOT FOUND!!" 
fi 

Код очень прост, я конвертирую обычный IP-адрес в шестнадцатеричный и запрашиваю через SNMPWALK сетевое оборудование, чтобы узнать, получает ли преобразованный IP-поток потоковое вещание.Почему grep не использует мою переменную в этом сценарии оболочки?

Проблема заключается в том, что труба grep не использует ПЕРЕМЕННУЮ, со средствами, если я заменяю "grep '$hexIpAdd'" на этот "grep 'C0 A8 01 02'", он работает.

+0

Дубликат - это ваша главная проблема, хотя я бы также предложил изменить вашу строку на 'if snmpwalk -v 2c -c public 192.168.252.187 .1.3.6.1.4.1.23 1.7.1.2.2.1.4.7.13.1.1.3301 | grep -q "$ hexIpAdd"; затем ' –

+0

** Спасибо ... он работает сейчас ** –

+0

Рад узнать, что это сработало, [вы можете отметить ответ как принятый, щелкнув на галочке ** слева вверху этого ответа] (http : //meta.stackexchange.com/a/5235/160242) – anubhava

ответ

0
  1. Не используйте одинарные кавычки для цитирования переменной в оболочке
  2. Использование grep -q избежать подстановка команд, трубопроводов с wc и [...] выражением:

он таким образом:

hexIpAdd='C0 A8 01 02' 

if snmpwalk -v 2c -c public 192.168.252.187 .1.3.6.1.4.1.231.7.1.2.2.1.4.7.13.1.1.3301 | 
    grep -q "$hexIpAdd"; then 
     echo "Value FOUND!!" 
else 
     echo "Value NOT FOUND!!" 
fi 
+1

** Спасибо ... он работает сейчас ** –

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