#!/bin/bash
##################################################################################
#
# GMountISO 一个挂载iso文件的小脚本
# 作者:xiaosilent
# Email:xiaosilent@gmail.com
# 版本:0.6# 依赖:zenity
# 用法:
#1,图形界面下,在iso文件上右击选择打开方式,在命令栏里找到GMountISO,启动脚本
#2.1终端下,直接执行脚本,和图形界面下一样
#2.2终端下,gmountiso iso_path mount_path 直接完成挂载
#
##################################################################################
################### 定义变量 ##########################################
ISO_PATH=$1#iso文件路径,从第一个参数里获取
MOUNTPOINT=$2#挂载点,第二个参数
CHOSED_FUNCTION=""#功能选择,挂载/卸载
ISMOUNTED=""#挂载点是否已经被占用
################### 一些功能模块 #######################################
###功能选择 挂载/卸载
function choosefunction(){
CHOSED_FUNCTION=`zenity --title="选择要执行的操作"--list --width=100--radiolist --column="是否选中"--column="操作类型"TRUE"挂载新卷"FALSE"卸载旧卷"`
if["$?" -eq "1"]then
echo"没有选择,直接退出"exit0fi
}
###获取ISO文件的路径
function getISOPath(){
if["$ISO_PATH" = ""]#命令行参数为空
then
ISO_PATH=`zenity --file-selection --title"选择要挂载的ISO文件"--filename="~"` #弹出文件选择对话框
if["$ISO_PATH" = ""]#从文件对话框"取消",给出提示信息,程序退出。
then
zenity --error --title="错误信息"--text="您没有指定要挂载的ISO文件!"exit1fi
fi
if[`file $ISO_PATH | grep "ISO 9660" | wc -c` -eq "0"]then
zenity --error --title="错误信息"--text="读取ISO文件出错,请确认文件存在且是标准的ISO格式"exit1fi
}
###获取挂载点路径
function getMountPoint(){
if["$MOUNTPOINT" = ""]#没有从命令行里制定挂载路径
then
MOUNTPOINT=`zenity --file-selection --directory --title="请选择ISO文件挂载目录"--filename="/media/iso"`
if["$MOUNTPOINT" = ""]#选择了"取消",给出提示信息,程序退出。
then
zenity --error --title="错误信息"--text="您没有指定挂载目录"exit1fi
fi
}
###检测挂载点是否存在
function checkMountPoint_Exist(){
if[! -e $MOUNTPOINT]#监测挂载点是否存在
then #挂载点 不存在
zenity --error --title="错误信息"--text="挂载目录$MOUNTPOINT不存在"exit1fi
}
###检测所指定的挂载点是否为目录
function checkMountPoint_Directory(){
if[! -d $MOUNTPOINT]#如果挂载点不是一个目录
then
enity --error --title="错误信息"--text="挂载目录$MOUNTPOINT不是目录"exit1fi
}
###检测指定的挂载点是否已经被使用
function checkMountPoint_Mounted(){
ISMOUNTED=`grep $MOUNTPOINT /etc/mtab | wc -c`
if["$ISMOUNTED" -gt "0"]then
ISMOUNTED="TRUE"else
ISMOUNTED="FALSE"fi
}
###执行 卸载 的操作
function doUMount(){
if["$ISMOUNTED" = "TRUE"]then
zenity --warning --title="确认卸载"--text="即将卸载$MOUNTPOINT下的文件卷。\n\n在确认卸载以前,请确认该卸载操作是安全的!\n\n是否确定要进行卸载?"if[$? -eq 1]then
exit0else
gksu umount $MOUNTPOINT ##gksu在图形界面下切换到超级用户。
checkMountPoint_Mounted
if["$ISMOUNTED" = "TRUE"]then
zenity --error --title="卸载失败"--text="设备忙,或其他原因,卸载失败!"exit1else
if["$CHOSED_FUNCTION" = "挂载新卷"]then
zenity --info --title="成功卸载"--text="原来的卷已经成功卸载,即将开始新卷的挂载操作!"else
zenity --info --title="成功卸载"--text="挂载到$MOUNTPOINT的卷已经成功卸载!"exit0fi
fi
fi
fi
}
###执行 挂载 的操作
function doMount(){
gksu"mount $ISO_PATH $MOUNTPOINT -t iso9660 -o loop,utf8"#gksu在图形界面下切换到超级用户。
checkMountPoint_Mounted
if["$ISMOUNTED" = "TRUE"]then
zenity --info --title="挂载成功"--text="文件$ISO_PATH已经被成功挂载到$MOUNTPOINT!\n\n程序将自动启动浏览器打开该目录!"nautilus $MOUNTPOINT #启动浏览器浏览新挂载的卷
else
zenity --error --title="挂载失败"--text="在把文件$ISO_PATH挂载到$MOUNTPOINT时失败!"fi
exit0}
################### 主程序 ####################
choosefunction
if["$CHOSED_FUNCTION" = "卸载旧卷"]#######卸载旧卷
then
getMountPoint
checkMountPoint_Exist
checkMountPoint_Directory
checkMountPoint_Mounted
if["$ISMOUNTED" = "TRUE"]########是否需要卸载
then
doUMount
else
zenity --info --title="无须卸载"--text="指定目录并未曾挂载任何文件卷!"exit0fi
else ##########挂载新卷
getISOPath
getMountPoint
checkMountPoint_Exist
checkMountPoint_Directory
checkMountPoint_Mounted
if["$ISMOUNTED" = "TRUE"]########是否需要卸载
then
doUMount
fi
doMount
fi
exit0