2015-12-14 3 views
2

У меня есть 10 устройств, которые используют hp-ux, и я хочу проверить дисковое пространство на каждом устройстве. Мое требование - если пространство более 90%, информация о пространстве и пространстве устройства будет сохранена в журнале. это список устройств и IP-адрес, который я установил в качестве переменной ipadd:HP-Unix: C-shell: проверка дискового пространства

lo1 100.45.32.43 
lot2 100.45.32.44 
lot3 100.45.32.44 
lot4 100.45.32.45 
lot5 100.45.32.46 
and so on.. 

Это мой сценарий до сих пор:

#!/bin/csh -f 

set ipaddress = (`awk '{print $2}' "ipadd"`) 
set device = (`awk '{print $1}' "ipadd"`) 

@ j = 1 
while ($j <= $#ipaddress) 
    echo $ipaddress 
    set i = 90  # Threshold set at 90% 
    set max = 100 
    while ($i <= $max)   
     rsh $ipaddress[$j] bdf | grep /dev/vg00 | grep $i% \ 
     |awk '{ file=substr($6,index($6,"/") + 1,length($6)); print "WARNING: $device[$j]:/" file " has reached " $5 ". Perform HouseKeeping IMMEDIATELY..." >> "/scripts/space." file ".file"}'  
     @ i++ 
    end 
    @ j++ 
end 

Выход после BDF:

/dev/vg00/lvol2 15300207 10924582 28566314 79%/
/dev/vg00/lvol4  42529 23786 25510 55% /stand 

выход на терминале после запуска сценария:

100.45.32.43 
100.45.32.44 

Выход на .file:

WARNING: $device[$j]:/ has reached 79%. Perform HouseKeeping IMMEDIATELY... 

Мой вопрос, это моя перекручивание есть что-то неправильно причина только перебирает только один раз, потому что мой .file выход только показать только одно устройство? И почему $ device [$ j] не выходит в .file output? или awk есть проблема?

Благодарим за совет.

+0

Вы можете попробовать здесь вместо: http://serverfault.com/ –

+0

Вы делаете 11 'rsh's на хост - не очень эффективно! Я бы пересмотрел решение. '$ Device [$ j]' печатается как есть потому, что он находится внутри 'awk '...'' (одинарная цитата - без расширения). – Kenney

ответ

0

Ваш код проверяется для каждой возможной процент между 90 и 100.

Persumably, вы бы ОК с кодом, который проверяет один раз, и спрашивает «это устройство процентов больше, чем на 90%» ?. Таким образом, то вам не нужен внутренний цикл на всех, и вы делаете только 1 соединение на машину, попробуйте

#!/bin/csh -f 

set ipaddress = (`awk '{print $2}' "ipadd"`) 
set device = (`awk '{print $1}' "ipadd"`) 
@ j = 1 
set i = 90  # Threshold set at 90% 
while ($j <= $#ipaddress) 
    echo $ipaddress 
    echo "#dbg: ipaddress[$j]=${ibpaddress[$j]}" 
    rsh $ipaddress[$j] bdf \ 
    | awk -v thresh="$i" -v dev="$device[$j]" \ 
     '/\/dev\/vg00/ { \ 
      sub(/%/,"",$5) \ 
      if ($5 > thresh) { \ 
      file=substr($6,index($6,"/") + 1,length($6)) \ 
      print "WARNING: " dev ":/" file " has reached " $5 ". Perform HouseKeeping IMMEDIATELY..." >> "/scripts/space." file ".file" \ 
     }\ 
    }'  
    @ j++ 
end 

Извините, но я не имею csh доступны дублированный-CHK синтаксических ошибок.

Итак, вот один лайнер, который мы определили, работая в вашей среде.

rsh $ipaddress[$j] bdf | nawk -v thresh="$i" -v dev="$device[$j]" '/\/dev\/vg00/ { sub(/%/,"",$5) ; if ($5 > thresh) { file=substr($6,index($6,"/") + 1,length($6));print "#dbg:file="file; print "WARNING: " dev ":/" file " has reached " $5 ". Perform HouseKeeping IMMEDIATELY..." >> "/scripts/space.file.TMP" } }' 

У меня нет системы с bdf. Измените две ссылки на $5 в тесте sub() и if, чтобы соответствовать номеру поля выхода, который имеет процент, который вы хотите проверить.

Отметьте, что -v var="value" является стандартным способом передачи значения переменной из оболочки в сценарий awk, который заключен в одиночные кавычки.

Будьте осторожны, чтобы все символы '\' в конце строки были последними символами, без пробелов или вкладок, или вы получите сообщение о неразглашении ошибки. ;-)

IHTH

+0

«\» включен в скрипт? – larrey

+0

@larrey: да и на самом деле, поскольку у меня нет 'csh' для проверки, моя память теперь говорит мне, что каждая строка скрипта' awk' также должна иметь символ '\'. Дайте мне знать, если вы получите синтаксические ошибки. – shellter

+0

@larrey: см. Версию с '\' для каждой строки 'awk'. Я нашел один из своих старых скриптов 'csh', и теперь я уверен, что в каждом разрыве строки должен быть символ продолжения ('/')' в конце. Хм, и теперь я замечаю, что вы используете 'HP-Unix'. поэтому мой опыт работы с Sun, и я знаю, что существуют значительные различия между версиями 2 Unix. Я думаю, что написал очень «простое ванильное» решение, но могут быть ловушки, о которых я не знаю ;-) Используйте комментарии для отправки мне сообщений об ошибках. – shellter

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