我现在想提一下,我对RegEx或BASH都不会过于流利,所以我会非常感激in-deph解释,这样我就可以学习。感谢。
我已经大大淡化了这个文件,但基本上我想要做的是获取数组$sqldatabases
并检查哪些变量包含@符号,然后更新该特定变量以不包含@符号,最后为该数据库运行mysqldump
。基本上我目前看到的代码是缺少if
语句过滤论坛@。
source config.sh
sqldatabases=(bans forum@ users donators)
for (( sqlcount = 0; sqlcount < ${#sqldatabases[@]}; sqlcount++ ))
do
if [[ "$sqldatabases[sqlcount]" =~ *[@]* ]] ; then
sqldatabases[sqlcount]=${sqldatabases[sqlcount]//[@]/}
echo "$sqldatabases[sqlcount]"
mysqldump -u"$sqluser" -p"$sqlpass" -h"$sqlhost" ${sqldatabases[sqlcount]} > .backups/$timedate/MySQL/${sqldatabases[sqlcount]}.sql;
fi
done
再次感谢您的帮助,并尝试深入解释每项修改。
答案 0 :(得分:1)
实际上,您不需要任何循环来删除@:
sqldatabases=(bans forum@ users donators)
sqldatabases=(${sqldatabases[@]/@/})
echo ${sqldatabases[*]}
答案 1 :(得分:1)
您需要使用${array[index]}
语法。并且您不需要*
匹配@
(或使用.*@.*
代替):
if [[ "${sqldatabases[sqlcount]}" =~ @ ]] ; then
sqldatabases[sqlcount]=${sqldatabases[sqlcount]//[@]/}
echo "${sqldatabases[sqlcount]}"
mysqldump # ...
fi