我是 Bash 脚本的新手,我尝试编写脚本,将 cifs windows 共享条目添加到 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:[email protected]" [email protected]
else
echo " all work fine " | mail -s " fstab ok " -a "FROM:[email protected]" [email protected]
fi
感谢您的帮助
答案1
您的脚本不是幂等的。也就是说,如果您再次运行它,它会严重破坏一切。
这种事情用 puppet/chef/etc 等配置管理工具处理会更好。你通过一个可以保证幂等性的接口来执行这样的操作。
您的脚本基本上没有错误检查。如果 FS 是只读的,会发生什么?如果 FS 已满,会发生什么?调用脚本的人是否以 root 身份运行它,或者忘记并以非特权用户身份运行它?
您可以在脚本中加入大量的错误检查来实现这一点,但在某些时候,您只是重复了从好的配置管理工具中获得的逻辑。
如果不清楚的话,我强烈建议您应该使用配置管理工具来执行此类任务。