我有一个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 语句的语法包括关键字:if
、then
、else
和fi
(别忘了elif
)。then
、else
和语句之后的命令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 程序。
但是,就您的脚本而言,它应该工作。