Я работаю над сценарием для создания массива md1, во-первых, чтобы проверить, существует ли массив, если он не создаст его. Я получаю команду, поскольку команда mdadm не найдена и несколько других. Скрипт не запустится.
#!/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
Ваша переменная check
полностью неверна. Он присваивает литеральную строку "proc/mdstat | grep md1"
- check
.
Чтобы исправить это, используйте вместо этого:
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
Несколько других примечаний:
if
не требует конструкции [ .. ]
. Может использовать любую команду; если команда завершается с 0, она считается истинной, иначе ложной. << EOF
является избыточным, простой echo yes |
сделает это.