0

我现在想提一下,我对 RegEx 或 BASH 都不太流利,因此非常感谢深入的解释,这样我可以学习。谢谢。

我已经大大简化了这个文件,但基本上我想要做的是获取一个数组$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

再次感谢您的帮助,并尝试深入解释每个修改。

4

2 回答 2

1

实际上,您不需要任何循环来删除@:

sqldatabases=(bans forum@ users donators)
sqldatabases=(${sqldatabases[@]/@/})
echo ${sqldatabases[*]}
于 2013-03-21T06:18:22.227 回答
1

您需要使用${array[index]}语法。而且您不需要*s 来匹配@(或.*@.*改用):

if [[ "${sqldatabases[sqlcount]}" =~ @ ]] ; then
            sqldatabases[sqlcount]=${sqldatabases[sqlcount]//[@]/}
            echo "${sqldatabases[sqlcount]}"
            mysqldump # ...
fi
于 2013-03-21T06:21:13.143 回答