bash 脚本中有两个“else”语句?

bash 脚本中有两个“else”语句?

我有一个sshfs来自远程服务器的安装,由于连接问题,该安装偶尔会中断。为了解决这个问题,我编写了一个脚本来检查挂载上是否存在文件,如果不存在,请向我发送电子邮件并重新连接sshfs

我不确定之后的第二条语句是否具有正确的语法else。不确定是否需要用括号来分隔它们,还是需要用分号来结束第一个语句?这是代码:

#!/bin/bash
file="/path/to/mount/.exists"
if [ -f "$file" ]

then

echo "$file found." > /dev/null 2>&1

else
/usr/sbin/sendmail -t [email protected] </etc/alert.txt

/bin/sh /etc/fix_mount.sh
fi

之后else,我首先发送警告消息让我们知道它发生了,然后执行第二个 bash 脚本来重新连接sshfs。我知道它/etc/fix_mount.sh可以单独工作,但恐怕else由于我的语法而无法正确执行。括号?分号?已经可以了吗?

答案1

你的语法没问题。

if/then/else 语句的语法包括关键字:ifthenelsefi(别忘了elif)。thenelse和语句之后的命令elif允许是列表命令(一个或多个命令)。

答案2

对我来说看起来不错,尽管我会写成这样:

#!/bin/bash

check_file="/path/to/mount/.exists"

if [ ! -f "$check_file" ]; then 
    /usr/sbin/sendmail -t [email protected] </etc/alert.txt
    /bin/sh /etc/fix_mount.sh
fi

我认为第一个echo声明没有任何理由,因为您将其定向到/dev/null.

如果文件是,则采取行动更有意义不是展示。因此就有了逻辑非!运算符。

另外,我会避免用作file变量名,因为它是GNU/Linux 程序

但是,就您的脚本而言,它应该工作。

相关内容