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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 11:49
25000 руб./за проект
25 апр. 2024, в 11:37
40000 руб./за проект