シェルスクリプトの複数の条件


0

スクリプトで2つの条件を指定することにこだわっています。私は2つのことを読むことができます-

  1. 最も近いサーバーとは
  2. MacBookまたはそれ以外の場合

次に、デフォルトのwriteコマンドを使用して、plistファイルを変更します。

モデルとサーバーの両方をクロスチェックする行を追加して、それに応じてファイルを書き込むにはどうすればよいですか?

#!/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

Er-質問は何ですか?いくつかの条件を含むスクリプトがあり、それらは一見整形式のようです。私はMacを持っていないので、チェックすることはできません...
エドワード

スクリプトに2つ入れたらどうすればいいのか知っている必要がありますか?つまり、MACHINE_MODELが何であり、NEARESTSERVERが何であるかを確認し、それに応じてアクションを実行する必要があります。
JamesHumam

申し訳ありませんが、まだわかりません。MACHINE_MODELとNEARESTSERVERをすでにチェックしており、それに応じてアクションを実行します。もちろん、スクリプトは(ifをカスケード接続することで)多少簡略化できますが、基本的にはあなたが求めていることを行うようです。(確認するために実行できません)
エドワード

回答:


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.