Я прошел большую часть пути благодаря полезным людям, но я все еще чешу голову ... У меня есть список шрифтов, которые мне нужно подтвердить, которые установлены на Ma c как часть пост- проверка сборки. Я хочу, чтобы l oop запускал команду system_profiler для каждого элемента в $ {fontArray}. Если шрифт не найден, я хочу добавить это значение $ I к $ {missingFonts}, чтобы можно было напечатать его в строке отчета после завершения сценария. Если шрифт найден, я хочу, чтобы он не делал ничего, кроме установки значений для некоторых других переменных. Позже я проверяю, является ли $ {missingFonts} пустым, если это так, то это PASS, если нет - FAIL, и я хочу отобразить содержимое $ {missingFonts}. Вот мой текущий код ...
Var19=Fonts
fontArray=("font1" "font2" "font3")
missingFonts=()
for i in "${fontArray[@]}"; do
system_profiler SPFontsDataType | grep "Full Name: $i" | sed 's/.*: //'
if ! system_profiler SPFontsDataType | grep -q "Full Name: $i"; then
missingFonts+=( "$i" );
fi
done
if [ ${#missingFonts[@]} -eq 0 ]; then
Val19="Fonts Installed"
Check19=PASS
else
Val19="Missing Fonts: ${missingFonts[@]}"
Check19=FAIL
fi
Line19=" | ${Check19} | ${Var19} = ${Val19} "
echo "$Line19"
exit0
Так как это не шрифты, я ожидал бы получить:
FAIL | Fonts = Missing Fonts: font1 font2 font 3
Вместо этого я получаю:
| FAIL | Fonts = Missing Fonts: font1 font2 font3
font1 font2 font3
И когда я использую настоящие имена шрифтов, которые я ЗНАЮ, они там, я просто получаю длинный список шрифтов в $ {fontArray} по одному и зацикливаюсь
realFont1
realFont2
realFont3
realFont1
realFont2
Пока я не прерву.
Я не понимаю, почему он печатает имена дважды при неудаче. ИЛИ почему он просто печатает шрифты один за другим и многократно просматривает список, когда они НАХОДЯТСЯ. Я все еще новичок в этом и едва мог справиться с «Привет, мир!» 6 месяцев go, поэтому я ценю совет.