Bash:即使条件成立也无法进入

Geo*_*nov 5 mysql wordpress bash backup

我正在构建一个备份WordPress数据库的脚本.我已经创建了MySQL转储的功能需求:

function db_backup {
    read -r -p "Dump the database? [Y/n]: " response
    if [[ $response =~ ^([yY][eE][sS] || [yY])$ ]]
    then
        mysqldump -h $1 -u $2 -p$3 $4 > $4.sql

        if [[ $? == 0 ]]
        then
            printf "Database %s dumped successfuly in %s.sql\n" ${db_name} ${db_name}
            return 0
        else
            printf "Database backup %bfailed%b\n" ${red} ${reset}
            return 1
        fi  
    else
        return 1
    fi  
}
Run Code Online (Sandbox Code Playgroud)

当Y或Yes/yEs/yeS/YES/yes是击球手时 - 它没有进入if true块,并且没有创建转储:(数据库详细信息正确并且转储就在手边,但我无法输入IF条件.

小智 5

尝试使用case声明:

db_backup()
{
    read -r -p "Dump the database? [Y/n]: " response

    case "$response" in
    y|Y|yes|Yes|YES)
        mysqldump -h $1 -u $2 -p$3 $4 > $4.sql

        if [[ $? == 0 ]]
        then
             printf "Database %s dumpedy in %s.sql\n" ${db_name} ${db_name}
             return 0
        else
             printf "Database backup %bfailed%b\n" ${red} ${reset}
             return 1
        fi
        ;;
    esac
    return 1

}
Run Code Online (Sandbox Code Playgroud)

  • `shopt -s nocasematch`也可能在这里使用. (2认同)