Duas declarações “else” em um script bash? [fechadas]

1

Eu tenho uma montagem sshfs de um servidor remoto que é interrompida de vez em quando devido a problemas de conectividade. Para corrigir isso, eu escrevi um script para verificar se existe um arquivo na montagem, e se não para me enviar e-mail e se reconectar com sshfs. Perdoe minha ignorância, mas não tenho certeza se tenho a sintaxe correta na segunda declaração depois de "else". Não tenho certeza se preciso de colchetes para separá-los ou um ponto-e-vírgula para terminar a primeira instrução? Aqui está o código ..

#!/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

Depois do "else", estou enviando primeiro a mensagem de aviso (para nos informar que aconteceu) e, em seguida, executando um segundo script bash para reconectar o sshfs. Eu sei que o /etc/fix_mount.sh funciona por conta própria, mas temo que o "else" não seja executado corretamente por causa da minha sintaxe. Colchetes? Ponto e vírgula? Já está tudo bem? Agradecemos antecipadamente por conselhos!

    
por P-Didz 22.08.2018 / 16:30

2 respostas

2

Sua sintaxe está bem.

A sintaxe de uma declaração if / then / else inclui palavras-chave: if , then , else e fi (não nos esqueçamos de elif ). Os comandos após as instruções then , else e elif podem ser uma lista de comandos (um ou mais comandos).

    
por 22.08.2018 / 16:47
1

Parece-me bem, embora eu tenha escrito algo assim:

#!/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

Não vejo motivo para a primeira instrução echo , pois você está direcionando para /dev/null .

E faz mais sentido agir se o arquivo não estiver presente . Daí o operador lógico não ! .

Além disso, eu evitaria usar file como um nome de variável, pois é um programa GNU / Linux .

No entanto, como seu script está, deve funcionar.

    
por 22.08.2018 / 16:43