Mysql Bash:即使条件为真,也无法进入
我正在构建一个脚本来备份WordPress数据库。 我已经创建了MySQL转储所需的函数:Mysql Bash:即使条件为真,也无法进入,mysql,wordpress,bash,backup,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 [[ $? ==
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
}
当Y或Yes/Yes/Yes/Yes/Yes/Yes为hitter时-它不会进入if true块,也不会创建转储:(数据库详细信息正确,转储仍在进行,但我无法进入if条件。尝试使用
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
}
您的正则表达式匹配(不区分大小写的引号用于格式化)“yes”
(带尾随空格)或“y”
(带前导空格)或空字符串”
1
写下以下内容:
if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
甚至更好
if [[ $response =~ ^[yY]([eE][sS])?$ ]]
您还可以使用globs:
if [[ $response = [yY]?([eE][sS]) ]]
(使用Bash为什么不首先将响应转换为所有caps,然后与Y或YES进行比较,例如,do:
如果[${response^^}=~^(Y | YES)$]];那么……fi
这样做的好处是,您不需要考虑大写/小写的可能组合,它们都会被检测到。此外,您可以不考虑:
如果[[$?==0]];那么…fi
您只需执行以下操作:
如果[[$?]];那么…fi
对于真值测试,[[0]]
的结果为真,而((0))
的结果为假
考虑一些简化,以提高可读性,例如
function db_backup {
read -r -p "Dump the database? [Y/n]: " response
if [[ ${response^^} =~ ^(Y|YES)$ ]]
then
if mysqldump -h $1 -u $2 -p$3 $4 > $4.sql
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
}
在regexp周围使用引号,例如:
[[$response=~“^([yY][eE][sS]| |[yY])$”]
正则表达式将匹配(为格式化目的添加不区分大小写的引号)“yes”
(带尾随空格)或“y”
(带前导空格)或空字符串”
…这就是你想要的吗?shopt-s nocasematch
在这里也可能有用。你的解决方案已经完成了!感谢其他人也参与了我的问题!@gniourf\u gniourf:regex锚定,如建议的,谢谢。
function db_backup {
read -r -p "Dump the database? [Y/n]: " response
if [[ ${response^^} =~ ^(Y|YES)$ ]]
then
if mysqldump -h $1 -u $2 -p$3 $4 > $4.sql
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
}