Bash добавить запись в fstab по сценарию
Я новичок в скриптах bash, и я пытаюсь написать скрипт, который добавляет запись для общего доступа к файлам cifs в fstab. Я написал небольшой сценарий, но я не уверен, что он будет работать нормально. У меня нет linux для тестирования. Можете ли вы помочь мне улучшить или исправить это? он будет работать на Debian 7/8 и дистрибутиве Ubuntu 12.04
вот мой код:
#!/bin/bash
cp -p /etc/fstab /etc/fstab.back-$(date +%F)
dir_src=//fileserver/share
dir_tgt=/mount/share
fsoptions="cifs _netdev,users,rw,auto,users,credentials=/etc/.cifspasswd,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0"
mkdir -p $dir_tgt
chown -R `whoami` $dir_tgt
echo -e "$dir_src \t\t $dir_tgt \t\t $fsoptions" >> /etc/fstab
printf "put your windows login: \n"
read login
echo -e "username=$login" >> /etc/.cifspasswd
printf "\n"
printf "Now put your windows password: \n"
read password
echo "password=$password" >> /etc/.cifspasswd
echo "domain=dom.local" >> /etc/.cifspasswd
mount -a >> /tmp/mount.log
if [ $? -ne 0]
then
cat /tmp/mount.log | mail -s " $hostname $username fstab return " -a "FROM:$username@mycompany.com" it@mycompany.com
else
echo " all work fine " | mail -s " fstab ok " -a "FROM:$username@mycompany.com" it@mycompany.com
fi
Спасибо за помощь
1 ответ
Ваш сценарий не идемпотент. То есть, если вы запустите его во второй раз, это серьезно сломает вещи.
Этот тип вещей лучше подходит для инструментов управления конфигурациями, таких как puppet/chef/etc. Подобные операции вы выполняете через интерфейс, который гарантирует вам идемпотентность.
Ваш скрипт в основном не проверяет ошибки. Что произойдет, если FS только для чтения, а что если FS заполнен? Человек, вызывающий скрипт, запускал его как root или забыл и запустил его как непривилегированный пользователь?
Чтобы добиться этого, вы могли бы включить в свой сценарий множество проверок на наличие ошибок, но в какой-то момент вы просто дублируете логику, которую получаете от хорошего инструмента управления конфигурацией.
Если это не ясно, я настоятельно думаю, что вы должны выполнять этот тип задач с помощью инструмента управления конфигурацией.