簡體   English   中英

如何在shell腳本中的if條件內分配變量

[英]How to assign a variable inside if condition in shell script

我想知道如何在shell腳本中的if塊內分配變量。

下面是我的代碼。

if [[ -z "$MMBOX_PATH" || -z "$BACKUP_PATH" || -z "$REMOTE_SERVER" || -z "$LOG_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

上面的代碼將在找到空變量時運行,但我也想知道哪個變量為空(例如,在上面的代碼中,假設LOG_PATH變量為空,則應在echo輸出中顯示它代替$ FLAG)

我嘗試了以下代碼。

if [[ `FLAG='MMBOX_PATH'` && -z "$MMBOX_PATH" || `FLAG='BACKUP_PATH'` && -z "$BACKUP_PATH" || `FLAG='REMOTE_SERVER'` && -z "$REMOTE_SERVER" || `FLAG='LOG_PATH'` && -z "$LOG_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

但是上面的代碼返回false,因此不會在echo中打印內容。

我還嘗試在條件執行之前保留FLAG變量,但是每次它返回“ Nothing”時

if FLAG='MMBOX_PATH' && [[ -z "$MMBOX_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

在上述情況下,我在輸出中得到FLAG ='MMBOX_PATH',但是如果沒有打印任何內容,那么我會再添加一個條件(意味着如果我對BACKUP_PATH,REMOTE_SERVER進行了同樣的檢查。。)

if FLAG='MMBOX_PATH' && [[ -z "$MMBOX_PATH" ]] && FLAG='LOG_PATH' && [[ -z "$LOG_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

在這種情況下,即使存在MMBOX_PATH並且LOG_PATH為空,也不會打印任何內容。

注意:使用if條件每個變量都可以知道哪個變量為空,但是我不想用if-else條件擴展行,我只是想知道if塊本身如何分配變量,條件為真時打印。

有人可以幫助我如何獲取空變量嗎? (/ bin / bash)

如果您正在做的就是使用來檢查是否可以使用函數。

check() {
for i in "$@";do
    if [[ -z "${!i}" ]]
    then
        echo -e "Must Provide All Required Paths [\$$i is Empty].."
        exit 1
    fi
done
}

check MMBOX_PATH BACKUP_PATH REMOTE_SERVER LOG_PATH

Shell已經提供了一種語法,用於驗證變量是否具有值,如果沒有,則退出:

: ${MMBOX_PATH:?Must provide MMBOX_PATH}
: ${BACKUP_PATH:?Must provide BACKUP_PATH}
: ${REMOTE_SERVER:?Must provide REMOVE_SERVER}
: ${LOG_PATH:?Must provide LOG_PATH}

無需定義執行相同功能的check功能。

最初的冒號是什么都不做的命令。 shell評估其參數,然后:立刻以狀態0退出。 參數擴展是驗證命名參數是否具有值的內容。 如果不是,則打印給定的錯誤消息。 如果外殼不是交互式的,則它也以狀態1退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM