簡體   English   中英

“選項不存在”與 bash 案例聲明

[英]“Option does not exist” with bash case statement

我正在嘗試執行以下操作以向 bash 命令添加一個簡單的開關。 該標志用於打開一個選項以使用另一個名為“終端”的程序執行某些文件備份任務。

但是,當我像這樣運行我的腳本(名為prepmultidev.sh )時:

bash prepmultidev.sh mysite.updatejan31 -b

當我在命令末尾添加-b選項時,它顯示“跳過備份”(即使它應該說“正在備份實時/測試/開發...”)然后我收到一條錯誤消息“ '-b' 選項不存在”。 當我不添加它時,它仍然顯示“跳過備份”(現在正確),但返回“沒有足夠的 arguments(缺少:'multidev')。” 在閱讀了教程后,我使用的代碼與其他人使用的代碼相同,但我的不是,我仍然和剛開始時一樣困惑。

#!/bin/bash
# Example: bash prepmultidev.sh mysite multidevname
# will back up live/test/dev and create a multidev of mysite.
# Add the -b flag if a backup of live/test/dev is required.
SITE=$1
MULTIDEV=$2
BACKUP=$3

# Exit on error
set -e

# Authenticate Terminus
terminus auth:login --machine-token=J6nCtWYtva8dtPk3xQ95ZJIG6FuSfQ6t14c0to-tmhH9R

# Check to see if a backup is needed of live/test/dev.

    case "$BACKUP" in
        b)
            echo "Backing up live/test/dev..."
            # Create backups of live, test, and dev environments
            terminus backup:create $SITE.live & 
            terminus backup:create $SITE.test &
            terminus backup:create $SITE.dev &
            ;;
        *) 
            echo "Skipping backup"
            ;;
    esac

# Now do some other stuff with $SITE.$MULTIDEV

我缺少什么來使它在存在時識別-b標志並進行備份,或者在不存在時簡單地回顯“跳過備份”?

bash case語句要求您指定模式,但如果您不指定任何模式匹配語法,它將僅匹配整個字符串。 在您的示例中, b)將匹配b ,但不匹配-b

要解決您的直接問題,您可以在您的案例模式中指定-以使其匹配:

    case "$BACKUP" in
        -b)
            echo "Backing up live/test/dev..."
            # Create backups of live, test, and dev environments
            terminus backup:create $SITE.live & 
            terminus backup:create $SITE.test &
            terminus backup:create $SITE.dev &
            ;;
        *) 
            echo "Skipping backup"
            ;;
    esac

但是,如果您希望添加更多標志,則使用getopts或更靈活的GNU getopt可能會更好(如果您可以使用它,請不要與 BSD 或 POSIX getopt混淆,后者更受限制)。

暫無
暫無

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

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