Falha no script Bash ao criar o array mdadm

0

Eu estou trabalhando em um script para criar o array md1, primeiro para verificar se o array existe se não ele irá criá-lo. Eu recebo o comando como comando mdadm não encontrado e alguns outros. O script não será executado.

 #!/bin/bash
check="proc/mdstat | grep md1"

 if [ -e $check]; then
{
echo "MD1 is already here"
}
    else 
{
mdadm --create --verbose /dev/md1 --level=5 --raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sde1 --spare-devices=1 /dev/sdf1 <<EOF
yes
EOF
if [ $? -eq 0 ]; then
    echo  "MD1 was created"
elif [$? -ne 0]; then
    echo "A fault has occured"
fi
}
fi
    
por user3185936 18.02.2014 / 10:48

1 resposta

3

Sua variável check está completamente errada. Está atribuindo a string literal "proc/mdstat | grep md1" a check .

Para corrigir isso, use isso:

if grep -q -e 'md1:' -e 'md127:' /proc/mdstat; then
    echo "MD1 is already here"
else 
    if echo yes | mdadm --create --verbose /dev/md1 --level=5 --raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sde1 --spare-devices=1 /dev/sdf1; then
        echo  "MD1 was created"
    else
        echo "An error has occurred"
    fi
fi

Algumas outras notas:

  • O Bash não exige chaves para instruções de várias linhas, portanto, é mais fácil omiti-las. Você deve sempre garantir o recuo adequado, no entanto.
  • A instrução if do Bash não exige uma construção [ .. ] . Pode usar qualquer comando; se o comando sair com 0, é considerado verdadeiro, senão falso.
  • A sintaxe << EOF é redundante, um simples echo yes | fará isso.
por kiri 18.02.2014 / 10:56