挂载 ISO 的脚本

#!/bin/bash
##################################################################################

#   mountiso 一个挂载iso文件的小小小脚本
#    作者:xiaosilent
#   Email:xiaosilent@gmail.com
#    版本:0.3
#    依赖:zenity
#    用法:
#      1,图形界面下,直接执行脚本
#      2.1终端下,直接执行脚本,和图形界面下一样
#      2.2终端下,./mountiso 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 "没有选择,直接退出"
      exit 0
   fi
}

###获取ISO文件的路径
function getISOPath(){
   if [ "$ISO_PATH" = "" ]  #命令行参数为空
   then
      ISO_PATH=`zenity --file-selection --title "选择要挂载的ISO文件" --filename="~"`   #弹出文件选择对话框
      if [ "$ISO_PATH" = "" ]   #从文件对话框"取消",给出提示信息,程序退出。
      then
         zenity --error --title="错误信息" --text="您没有指定要挂载的ISO文件!"
         exit 1
      fi
   fi
   if [ `file $ISO_PATH | grep "ROM" | wc -c` -eq "0" ]
   then
      zenity --error --title="错误信息" --text="读取ISO文件出错,请确认文件存在且是标准的ISO格式"
      exit 1
   fi
}

###获取挂载点路径
function getMountPoint(){
   if [ "$MOUNTPOINT" = "" ]   #没有从命令行里制定挂载路径
   then
      MOUNTPOINT=`zenity --file-selection --directory --title="请选择ISO文件挂载目录"   --filename="/media/iso"`
      if [ "$MOUNTPOINT" = "" ]   #选择了 "取消",给出提示信息,程序退出。
      then
      zenity --error --title="错误信息" --text="您没有指定挂载目录"
      exit 1
      fi
   fi
}

###检测挂载点是否存在
function checkMountPoint_Exist(){
   if [ ! -e $MOUNTPOINT ]   #监测挂载点是否存在
   then #挂载点 不存在
      zenity --error --title="错误信息" --text="挂载目录$MOUNTPOINT不存在"
      exit 1
   fi
}

###检测所指定的挂载点是否为目录
function checkMountPoint_Directory(){
   if [ ! -d $MOUNTPOINT ]  #如果挂载点不是一个目录
   then
      enity --error --title="错误信息" --text="挂载目录$MOUNTPOINT不是目录"
      exit 1
   fi
}

###检测指定的挂载点是否已经被使用
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已经被占用,必须要先进行卸载。nn在确认卸载以前,请确认该卸载操作是安全的!nn卸载操作需要root权限,是否确定要进行卸载?"
      if [ $? -eq 1 ]
      then
         exit 0
      else
         gksu umount $MOUNTPOINT  ##gksu在图形界面下切换到超级用户。
         checkMountPoint_Mounted
         if [ "$ISMOUNTED" = "TRUE" ]
         then
            zenity --error --title="卸载失败" --text="设备忙,或其他原因,卸载失败!"
            exit 1
         else
            if [ "$CHOSED_FUNCTION" = "挂载新卷" ]
            then
               zenity --info --title="成功卸载" --text="原来的卷已经成功卸载,即将开始新卷的挂载操作!"
            else
               zenity --info --title="成功卸载" --text="原来的卷已经成功卸载!"
               exit 0
            fi
         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!nn程序将自动启动浏览

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据