Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql BASH:在测试条件之前检查错误_Mysql_Linux_Bash_Shell - Fatal编程技术网

Mysql BASH:在测试条件之前检查错误

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

我正在尝试编写一个简单的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" | 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。