Bashスクリプトに2つの「else」文がありますか? [閉鎖]

Bashスクリプトに2つの「else」文がありますか? [閉鎖]

sshfs接続の問題によって時々中断するリモートサーバーのインストールがあります。この問題を解決するために、ファイルがマウントされていることを確認するスクリプトを作成しました。そうでない場合は、電子メールを送信して再接続してくださいsshfs

その後の2番目の文が正しい構文を持っているかどうかはわかりません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最初に警告メッセージを送信して問題が発生したことを知らせ、2番目のbashスクリプトを実行して再接続しますsshfs。私はそれがそれ自体で動作することを知っていますが、私の構文のために正しく動作しないよう/etc/fix_mount.shです。elseかっこ?セミコロン?準備しましたか?

答え1

あなたの文法は大丈夫です。

if/then/elseステートメントの構文にはifthenおよび(忘れないでください)というキーワードが含まれています。 、およびステートメントの後に許可されるコマンドは次のとおりです。elsefielifthenelseelifリストコマンド(1つ以上のコマンド)。

答え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

ファイルが次の場合、アクションを取る方が合理的です。いいえ展示する。したがって、論理NOT!演算子です。

fileまた、変数名としては使用しません。GNU/Linuxプログラム

しかし、スクリプトに関する限りしなければならない働く

関連情報