Anna_Repina
@Anna_Repina
Хочу все знать

Как написать правильно цикл что бы вывод был корректным и имел результат OK/NOT OK?

Есть скрипт,в котором есть файл для определения оперативной памяти.
dmidecode -t memory |awk '/Device/{i++;print "Device "i}/\tSpeed|\tSize|\tForm/' |egrep --color=always "No|Module|Installed|$ " >> 2.sh
echo dmidecode -t memory |awk '/Device/{i++;print "Device "i}/\tSpeed|\tSize|\tForm/' |egrep --color=always "No|Module|Installed|$"


Вывод выглядит следующим образом :
Device 1
Device 2
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 3
Size: 32 GB
Form Factor: DIMM
Speed: 2933 MT/s
Device 4
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 5
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 6
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 7
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 8
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 9
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 10
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 11
Size: 32 GB
Form Factor: DIMM
Speed: 2933 MT/s
Device 12
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 13
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 14
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 15
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 16
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown
Device 17
Size: No Module Installed
Form Factor: DIMM
Speed: Unknown


записанный в файле 1.sh, перенаправляющий вывод в 2.sh
Хочу написать цикл, который бы считал количество строк содержащих 32 GB, 2933 MT/s
и в конце, если количество таких строк =8 , то внизу была бы надпись TEST OK
иначе TEST NOT OK

есть 3 проблемы
1. Перезаписывая файл 2, что бы греповать вывод приходится перенаправлять вывод в еще один файл, греповать уже внутри него. Не знаю как сделать так, что бы перезаписывалась определенная часть файла (условно - перед строкой grep -w "32\|2933")

2. Не знаю как правильно написать цикл из этого вывода, что бы он считал строки в которых есть 32 и 2933 и выводил результат TEST OK/NOT OK.

3. Понимаю, что Девайс 1 - system memory ( system Boar or motherboard) Массив физической памяти, находится на шине 0х0016(Intel C620 Series Chipset Family MEI Controller), остальные (DIMM) на 17-26 шине. Но он искажает данные, как убрать его из списка вывода- не знаю.
Пока навыков не хватает.....
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну сделайте так:
COUNT=$(dmidecode -t memory |awk '/Device/{i++}/\tSpeed:|\tSize:/{if(i<17)print "Device " i ": " $0}' |egrep "32|2933" |wc -l)
if [ "${COUNT}" == "8" ]; then
    echo "TEST OK"
else
    echo "TEST NOT OK"
fi
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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