2014-07-10 51 views
0

我想寫一個運行profiles -P並基於響應退出的安裝檢查腳本。安裝檢查腳本,檢查配置文件-P爲特定的配置文件

我們使用Meraki的個人資料,其中輸出看起來像這樣(如果已安裝):

_computerlevel[1] attribute: profileIdentifier: com.meraki.sm.mdm 
There are 1 configuration profiles installed 

有沒有一種方法來檢查了這一點放了這個確切的迴應?

我的想法是這樣的:

#!/bin/bash 
output=profiles -P 
if [ output = com.meraki.sm.mdm ]; then 
exit 0; 
else 
exit 1; 

任何想法?

回答

0

嘗試以下方法:

#!/bin/bash 

if sudo profiles -P | egrep -q ': com.meraki.sm.mdm$'; then 
    exit 0 
else 
    exit 1 
fi 
  • sudo profiles -P輸出(注意,profiles總是需要根特權)經由管道(|)被髮送到egrep;這兩個命令形成一個管道
  • egrep -q ': com.meraki.sm.mdm$'搜索通過profile的輸出:
    • -q(安靜)選項不產生輸出,簡單地經由它的退出代碼產生一個匹配信號是否找到(0)否(1)。
    • ': com.meraki.sm.mdm$'是一個正則表達式,它與在行末尾($)處找到的字符串'com.meraki.sm.mdm'相匹配,並以':'開頭。
    • ( egrep is the same as grep -E` - 它激活支持擴展正則表達式 - 在這裏不是必須的,但通常建議減少驚喜)。
  • if聲明計算結果爲真,如果管道返回退出代碼0,並否則爲false(非零)。請注意,默認情況下,它是管道中的最後一個命令,其中的退出代碼確定管道的整體退出代碼。

順便說一句,如果你想要做的一切都是爲了讓您的腳本反映的字符串是否找到或沒有(例如,如果你不需要把你的腳本中採取進一步的行動),以下就足夠了:

sudo profiles -P | egrep -q ': com.meraki.sm.mdm$' 
exit $? # Special variable `$?` contains the most recent command's exit code 

如果你想在失敗只的事件後立即退出腳本:

sudo profiles -P | egrep -q ': com.meraki.sm.mdm$' || exit 

# Alternative, with error message: 
sudo profiles -P | egrep -q ': com.meraki.sm.mdm$' || 
    { ec=$?; echo 'Profile not installed.' >&2; exit $ec; } 

相反,如果你想後立即退出事件成功的:

sudo profiles -P | egrep -q ': com.meraki.sm.mdm$' && exit 
+0

太謝謝你了。這將完美地工作。我將不得不交換退出代碼的目的,我用它的目的,但它是完美的。謝謝!現在要解決捲曲問題>:D – WardsParadox

+0

@WardsParadox:很高興聽到它適合你;我的榮幸。 – mklement0

+0

只是一個快速的,但如果它在安裝程序的情況下使用,它是否仍然需要sudo?由於安裝程序提示(我構建的所有內容)都需要root權限的管理權限,而不需要sudo,請更正? – WardsParadox