shell script无法执行
时间:2011-01-24
来源:互联网
来看论坛也有一段时间了,问了些问题,得到大家的支持,无论能否帮到我,我都感谢大家。
现在我也发些自己探索的成果,同大家分享。水平有限,多多包涵。
以下脚本在ubuntu10.x 64bit gnome下测试通过。因为光盘与U盘在ubuntu10.x中都是自动检测并且自动挂载的,所以就不对其进行处理了。
make_fstab()
{
echo "aa" | sudo -S ls * > /dev/null #因为相关操作要su,所以先拿到到sudo的密码
reset
mounted=$(mount | grep /dev/sd | cut -f 1 -d ' ') #查看当前已经挂载了哪些分区(至少有/对应的分区)
[ -e "/dev/shm/tmp_mnt" ] || mkdir /dev/shm/tmp_mnt #/dev/shm在我的ubuntu中是tmpfs,可以减少读写磁盘。这个目录主要是临时挂载ext用的
for dev_name in $(ls /dev/sd??); #查找分区(但不包括硬盘设备,如/dev/sda,/dev/sdb)
do
dev_type=$(mount --guess-fstype ${dev_name}) #判断文件系统类型
echo -n $dev_name \(${dev_type}\) '' #将分区和文件系统打印出来
if [ -n "$(echo $mounted | grep ${dev_name})" ]; then #如果已挂载的话,打印 already mounted
echo is already mounted
else #否则按其文件系统类型进行挂载,挂载点取其卷标,与Nautilus行为保持一致
case "$dev_type" in
ntfs)
label=$(echo "aa" | sudo -S ntfslabel ${dev_name})
;;
ext?) #因为我无法取得未挂载的ext2/3/4的卷标,所以先将其在一个内存文件夹中只读挂载,拿到卷标后再卸载
echo "aa" | sudo -S mount -t $dev_type -o ro $dev_name /dev/shm/tmp_mnt
label=$(echo "aa" | sudo -S e2label ${dev_name})
echo "aa" | sudo -S umount $dev_name
;;
*) #其它我未试过(resierfs我试过,要安装相关组件才能取其卷标)
echo not support
continue
;;
esac
#正式挂载分区到“/media/卷标”中。这里只是简单批定了一个-o rw参数,以读/写方式挂载。
echo "aa" | sudo -S mkdir -p /media/${label}
echo "aa" | sudo -S mount -t $dev_type -o rw $dev_name /media/${label}
echo is mounted to /media/${label}
fi
done;
[ -e "/dev/shm/tmp_mnt" ] && rmdir /dev/shm/tmp_mnt #删除临时文件夹(不删也可,关机后自动消失的)
echo -n Will quit in 10s
sleep 10
}
make_fstab()
最后我保存成一个.sh文件,对其chmod a+x。开机进入桌面后,双击它运行即可。
我曾试过把代码或.sh文件的调用放在/etc/rc.local中,但不会开机自动执行,也试过把其放在启动程序(Startup App)中,10.04可以开机自动执行,但10.10也不能开机自动执行。
现在我也发些自己探索的成果,同大家分享。水平有限,多多包涵。
以下脚本在ubuntu10.x 64bit gnome下测试通过。因为光盘与U盘在ubuntu10.x中都是自动检测并且自动挂载的,所以就不对其进行处理了。
make_fstab()
{
echo "aa" | sudo -S ls * > /dev/null #因为相关操作要su,所以先拿到到sudo的密码
reset
mounted=$(mount | grep /dev/sd | cut -f 1 -d ' ') #查看当前已经挂载了哪些分区(至少有/对应的分区)
[ -e "/dev/shm/tmp_mnt" ] || mkdir /dev/shm/tmp_mnt #/dev/shm在我的ubuntu中是tmpfs,可以减少读写磁盘。这个目录主要是临时挂载ext用的
for dev_name in $(ls /dev/sd??); #查找分区(但不包括硬盘设备,如/dev/sda,/dev/sdb)
do
dev_type=$(mount --guess-fstype ${dev_name}) #判断文件系统类型
echo -n $dev_name \(${dev_type}\) '' #将分区和文件系统打印出来
if [ -n "$(echo $mounted | grep ${dev_name})" ]; then #如果已挂载的话,打印 already mounted
echo is already mounted
else #否则按其文件系统类型进行挂载,挂载点取其卷标,与Nautilus行为保持一致
case "$dev_type" in
ntfs)
label=$(echo "aa" | sudo -S ntfslabel ${dev_name})
;;
ext?) #因为我无法取得未挂载的ext2/3/4的卷标,所以先将其在一个内存文件夹中只读挂载,拿到卷标后再卸载
echo "aa" | sudo -S mount -t $dev_type -o ro $dev_name /dev/shm/tmp_mnt
label=$(echo "aa" | sudo -S e2label ${dev_name})
echo "aa" | sudo -S umount $dev_name
;;
*) #其它我未试过(resierfs我试过,要安装相关组件才能取其卷标)
echo not support
continue
;;
esac
#正式挂载分区到“/media/卷标”中。这里只是简单批定了一个-o rw参数,以读/写方式挂载。
echo "aa" | sudo -S mkdir -p /media/${label}
echo "aa" | sudo -S mount -t $dev_type -o rw $dev_name /media/${label}
echo is mounted to /media/${label}
fi
done;
[ -e "/dev/shm/tmp_mnt" ] && rmdir /dev/shm/tmp_mnt #删除临时文件夹(不删也可,关机后自动消失的)
echo -n Will quit in 10s
sleep 10
}
make_fstab()
最后我保存成一个.sh文件,对其chmod a+x。开机进入桌面后,双击它运行即可。
我曾试过把代码或.sh文件的调用放在/etc/rc.local中,但不会开机自动执行,也试过把其放在启动程序(Startup App)中,10.04可以开机自动执行,但10.10也不能开机自动执行。
作者: urcllr 发布时间: 2011-01-24
注:
echo "aa" | sudo -S …… 里面的"aa"是sudo时要输入的密码。这句是自动输入密码,不用执行时再手工输入。
如果执行后Nautilus中分区消失,多数是此分区被挂到“/media/”下,用umount取消挂载即可。
echo "aa" | sudo -S …… 里面的"aa"是sudo时要输入的密码。这句是自动输入密码,不用执行时再手工输入。
如果执行后Nautilus中分区消失,多数是此分区被挂到“/media/”下,用umount取消挂载即可。
作者: urcllr 发布时间: 2011-01-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28