Я новичок в написании сценариев 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
Спасибо за вашу помощь
Ваш сценарий не идемпотентный. То есть, если вы запустите его во второй раз, это серьезно что-то сломает.
С такими вещами лучше справится инструмент управления конфигурацией, такой как puppet / chef / etc. Вы выполняете подобные операции через интерфейс, который гарантирует вам идемпотентность.
В вашем скрипте практически нет проверки ошибок. Что произойдет, если ФС доступна только для чтения, что произойдет, если ФС заполнена? Человек, вызывающий скрипт, запустил его от имени пользователя root или забыл и запустил его как непривилегированный пользователь?
Для этого вы можете добавить в скрипт много проверок ошибок, но в какой-то момент вы просто дублируете логику вы получаете от хорошего инструмента управления конфигурацией.
Если это не ясно, я твердо уверен, что вам следует выполнять этот тип задач с помощью инструмента управления конфигурацией.