쉘 스크립트의 다중 조건


0

나는 스크립트에서 두 가지 조건을 부여하는데 집착했다. 나는 두 가지를 읽을 수있다.

  1. 가장 가까운 서버 란 무엇입니까?
  2. MacBook 또는 기타 항목 인 경우

pls 파일을 수정하려면 defaults write 명령을 사용하십시오.

두 가지를 모두 교차하는 선을 추가하려면 어떻게해야합니까? MODEL & amp; 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

어 - 뭐가 문제 야? 몇 가지 조건이 포함 된 스크립트가 있는데, 언뜻보기에는 잘 구성된 것 같습니다. 나는 맥을 가지고 있지 않다. 그래서 나는 확인할 수 없다 ...
Edward

대본에 두 개를 넣는 방법을 알아야합니다. 내 말은, 나는 MACHINE_MODEL이 무엇인지, NEARESTSERVER가 무엇인지 확인하고 이에 따라 조치를 취해야한다.
JamesHumam

미안하지만 아직도 이해가 안되네. MACHINE_MODEL 및 NEARESTSERVER를 이미 확인 했으므로 그에 따라 조치를 취하십시오. 물론, 스크립트는 (if를 직렬로 연결하여) 다소 단순화 될 수 있지만 기본적으로 사용자가 묻는 것을 수행하는 것으로 보입니다. (나는 그것을 점검 할 수 없다)
Edward

답변:


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

내가 뭔가를 놓칠 수 있었기 때문에 이것을 약간 시험하고 조정해야합니다. 이 방법을 더 잘 활용할 수있는 다른 방법은 없습니다 (목록 대신 네임 스페이스 사용 제외).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.