Я застрял в предоставлении двух условий в моем сценарии. Я могу читать две вещи -

  1. Что такое ближайший сервер
  2. Если это MacBook или что-нибудь еще

и затем используйте команду записи по умолчанию, чтобы изменить файл plist.

Как я могу добавить строку, которая проверяет обе вещи - MODEL & SERVER, а затем записать файл соответственно?

#!/bin/sh
# Get the logfile for this machine
dslog="/tmp/DSNetworkRepository/Logs/$(ioreg -l | grep IOPlatformSerialNumber | awk '{print $4}' | cut -d \" -f 2).log"

NEARESTSERVER=$(awk 'gsub(/.*server=|port=.*/,"")' $dslog | tail -1)


# get machine model
MACHINE_MODEL=`/usr/sbin/ioreg -c IOPlatformExpertDevice | grep "model" | awk -F\" '{ print $4 }'`

MacBook=`/usr/sbin/ioreg -c IOPlatformExpertDevice | grep "model" | cut -c21-27`


# Check if the Model is MacBook or Desktop & connected to which Booster and write the plist file accordingly

if [[ "${MACHINE_MODEL}" == "MacBook" && $NEARESTSERVER == 'SRV-DELHI.xaas.com']]
then
  defaults write /Library/com.myorg.repo ConnectionNumber -string One

elif [[ "${MACHINE_MODEL}" != "MacBook" && $NEARESTSERVER == 'SRV-DELHI.xaas.com']]
then
  defaults write /Library/com.myorg.repo ConnectionNumber -string Two

fi

# Check if the Model is MacBook or Desktop & connected to which Booster and write the plist file accordingly
if [[ "${MACHINE_MODEL}" == "MacBook" && $NEARESTSERVER == 'SRV-MUMBAI.xaas.com']] 
then
  defaults write /Library/com.myorg.repo ConnectionNumber -string Three

elif [[ "${MACHINE_MODEL}" != "MacBook" && $NEARESTSERVER == 'SRV-MUMBAI.xaas.com']] 
then
  defaults write /Library/com.myorg.repo ConnectionNumber -string Four

fi

exit 0

1 ответ1

0

Если я правильно понимаю, вы хотите понять, как сделать это более кратким и структурированным на языке Shell .

Я бы сделал что-то вроде этого:

set -A strings \
    One \
    Two \
    Three \
    Four
# You should swap Three and Four so it's easy to fit the logic.
counter=0
for i in \
    "[ \"$NEARESTSERVER\" == 'SRV-MUMBAI.xaas.com' ]" \
    "[ \"$MACHINE_MODEL\" = 'MacBook' ]" ; do
    eval "$i && counter=\"$(($counter + (! $? + 1)))\""
done
defaults write /Library/com.myorg.repo ConnectionNumber -string ${strings[$counter]}

Вы должны проверить и отрегулировать это немного, потому что я мог что-то пропустить. Я не знаю другого способа сделать это лучше (за исключением использования пространств имен вместо списков).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .