Для l oop проверять шрифты по имени согласно списку в массиве, возвращающему повторяющийся список - PullRequest
0 голосов
/ 13 марта 2020

Я прошел большую часть пути благодаря полезным людям, но я все еще чешу голову ... У меня есть список шрифтов, которые мне нужно подтвердить, которые установлены на 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, поэтому я ценю совет.

1 Ответ

0 голосов
/ 27 апреля 2020
fontArray=("font1" "font2" "font3")
missingFonts=()
for i in "${fontArray[@]}"; do
    if ! system_profiler SPFontsDataType | grep -q "Full Name: $i";  then 
        missingFonts+=( "$i" );
    fi
done

if [ ${#missingFonts[@]} -eq 0 ] ; then
    Val19="Installed"
    Check19=PASS
else
    Val19="Missing Fonts: ${missingFonts[@]}"
    Check19=FAIL
fi
...