Múltiplas Condições no script de shell

0

Estou preso a dar duas condições no meu script. Eu posso ler duas coisas -

  1. Qual é o SERVIDOR MAIS PRÓXIMO
  2. Se for o MacBook ou qualquer outra coisa

e, em seguida, use o comando defaults write para modificar o arquivo plist.

Como posso adicionar uma linha que cruza as duas coisas? MODEL & SERVER e, em seguida, escreva o arquivo de acordo?

#!/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
    
por JamesHumam 09.07.2015 / 23:02

1 resposta

0

Se eu entendi bem, você quer entender como tornar isso mais curto e estruturado em Shell language.

Eu faria algo assim:

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]}

Você deve testar e ajustar isso um pouco, porque eu poderia ter perdido alguma coisa. Não conheço outra maneira de tornar isso melhor (exceto pelo uso de namespaces em vez de listas).

    
por 25.07.2015 / 20:36