Mysql BASH:在测试条件之前检查错误
我正在尝试编写一个简单的Bash脚本来监视MySQL复制状态。脚本如下所示:Mysql BASH:在测试条件之前检查错误,mysql,linux,bash,shell,Mysql,Linux,Bash,Shell,我正在尝试编写一个简单的Bash脚本来监视MySQL复制状态。脚本如下所示: #!/bin/bash dbhost=192.168.1.2 repluser=root replpasswd=password echo "show slave status\G"|\ mysql -h $dbhost -u $repluser -p$replpasswd > tmpd 2>/dev/null repl_IO=$(cat tmpd | grep "Slave_IO_Running" | c
#!/bin/bash
dbhost=192.168.1.2
repluser=root
replpasswd=password
echo "show slave status\G"|\
mysql -h $dbhost -u $repluser -p$replpasswd > tmpd 2>/dev/null
repl_IO=$(cat tmpd | grep "Slave_IO_Running" | cut -f2 -d':')
repl_SQL=$(cat tmpd | grep "Slave_SQL_Running" | cut -f2 -d':')
if [ $repl_IO != "Yes" -o $repl_SQL != "Yes" ] ; then
echo
echo -e "\033[31m Replication Error."
echo -e "\033[0m"
mail -s "replication error" email@domain.com < tmpd
else
echo
echo -e "\033[32mReplication is working fine"
echo -e "\033[0m"
fi
我知道问题是,因为我正在查询从MySQL服务器,它找不到它。所以它没有检查Slave\u IO\u运行和Slave\u SQL\u运行的条件。我怎么去
关于在运行这些条件之前检查从属服务器是否已启动。因此,简而言之,我只希望显示“复制工作正常”,前提是主设备和从设备都处于启动和关闭状态
正在运行,并且符合这些条件。任何帮助都将不胜感激。多谢各位 您的脚本有一个问题:有经验的shell程序员知道,如果变量为空,则语句为空 如果[$foo=某物] 看起来像贝壳一样 如果 你可以用它来解决这个问题 如果[“$foo”=某物]
因此,一般来说,在[]中使用的所有变量周围加上“标记”您的脚本有一个问题:有经验的shell程序员知道,如果变量为空,则语句为空 如果[$foo=某物] 看起来像贝壳一样 如果 你可以用它来解决这个问题 如果[“$foo”=某物]
因此,一般来说,在[]中使用的所有变量周围加上“标记”如果
$repl\u IO
和$repl\u SQL
为空,则:
if [ $repl_IO != "Yes" -o $repl_SQL != "Yes" ] ; then
相当于:
if [ != Yes -o != Yes ] ; then
我想你能明白为什么这不起作用。您需要将参数扩展用双引号括起来,这样无论它们包含什么,它们都被视为单参数:
if [ "$repl_IO" != "Yes" -o "$repl_SQL" != "Yes" ] ; then
或者使用[…]
而不是[…]
,因为使用这些东西会更智能一些:
if [[ $repl_IO != "Yes" -o $repl_SQL != "Yes" ]] ; then
或两者兼而有之:
if [[ "$repl_IO" != "Yes" -o "$repl_SQL" != "Yes" ]] ; then
如果
$repl\u IO
和$repl\u SQL
为空,则:
if [ $repl_IO != "Yes" -o $repl_SQL != "Yes" ] ; then
相当于:
if [ != Yes -o != Yes ] ; then
我想你能明白为什么这不起作用。您需要将参数扩展用双引号括起来,这样无论它们包含什么,它们都被视为单参数:
if [ "$repl_IO" != "Yes" -o "$repl_SQL" != "Yes" ] ; then
或者使用[…]
而不是[…]
,因为使用这些东西会更智能一些:
if [[ $repl_IO != "Yes" -o $repl_SQL != "Yes" ]] ; then
或两者兼而有之:
if [[ "$repl_IO" != "Yes" -o "$repl_SQL" != "Yes" ]] ; then
或者使用
[[]]
如果使用bash,则不需要引用变量,而且它比[]
更强大
freenode IRC频道的greybot说:
[[是一个bash关键字,与[
命令。请参见和
.除非
您是为POSIX sh编写的,我们推荐[]
或者使用
[[]]
如果使用bash,则不需要引用变量,而且它比[]
更强大
freenode IRC频道的greybot说:
[[是一个bash关键字,与[
命令。请参见和
.除非
您是为POSIX sh编写的,我们推荐[]
您好,非常感谢您的帮助和解释。非常感谢。您好,非常感谢您的帮助和解释。非常感谢。IMO您应该链接文章,而不包括机器人的factoId。IMO您应该链接文章,而不包括机器人的factoId。