#!/bin/bash
##################################################################################
#??
#??? GMountISO 一個(gè)掛載在GNOME環(huán)境下掛載iso文件的小小小腳本
#?????作者:xiaosilent
#?? ? Email:xiaosilent@gmail.com
#?????版本:0.3
#?????依賴:zenity
#?????用法:
#????????1,圖形界面下,直接執(zhí)行腳本,也可復(fù)制到~/gnome2/nautilus-scripts/下,這樣將在nautilus的上下文菜單中出現(xiàn)script項(xiàng)。
#????????2.1終端下,直接執(zhí)行腳本,和圖形界面下一樣
#????????2.2終端下,./mountiso?iso_path?mount_path?直接完成掛載
#
##################################################################################
###################?定義變量?##########################################
ISO_PATH=$1????????#iso文件路徑,從第一個(gè)參數(shù)里獲取
MOUNTPOINT=$2????#掛載點(diǎn),第二個(gè)參數(shù)
CHOSED_FUNCTION=""????#功能選擇,掛載/卸載
ISMOUNTED=""????#掛載點(diǎn)是否已經(jīng)被占用
###################?一些功能模塊?#######################################
###功能選擇?掛載/卸載
function?choosefunction(){
????CHOSED_FUNCTION=`zenity?--title="選擇要執(zhí)行的操作"?--list?--width=100?--radiolist?--column="是否選中"?--column="操作類型"?TRUE?"掛載新卷"?FALSE?"卸載舊卷"`
????if?[?"$?"?-eq?"1"?]
????then
????????echo?"沒有選擇,直接退出"
????????exit?0
????fi
}
###獲取ISO文件的路徑
function?getISOPath(){
????if?[?"$ISO_PATH"?=?""?]??#命令行參數(shù)為空
????then
????????ISO_PATH=`zenity?--file-selection?--title?"選擇要掛載的ISO文件"?--filename="~"`????#彈出文件選擇對話框
????????if?[?"$ISO_PATH"?=?""?]????#從文件對話框"取消",給出提示信息,程序退出。
????????then
????????????zenity?--error?--title="錯(cuò)誤信息"?--text="您沒有指定要掛載的ISO文件!"
????????????exit?1
????????fi
????fi
????if?[?`file?$ISO_PATH?|?grep?"ROM"?|?wc?-c`?-eq?"0"?]
????then
????????zenity?--error?--title="錯(cuò)誤信息"?--text="讀取ISO文件出錯(cuò),請確認(rèn)文件存在且是標(biāo)準(zhǔn)的ISO格式"
????????exit?1
????fi
}
###獲取掛載點(diǎn)路徑
function?getMountPoint(){
????if?[?"$MOUNTPOINT"?=?""?]????#沒有從命令行里制定掛載路徑
????then
????????MOUNTPOINT=`zenity?--file-selection?--directory?--title="請選擇ISO文件掛載目錄"???--filename="/media/iso"`
????????if?[?"$MOUNTPOINT"?=?""?]????#選擇了?"取消",給出提示信息,程序退出。
????????then
????????zenity?--error?--title="錯(cuò)誤信息"?--text="您沒有指定掛載目錄"
????????exit?1
????????fi
????fi
}
###檢測掛載點(diǎn)是否存在
function?checkMountPoint_Exist(){
????if?[?!?-e?$MOUNTPOINT?]???#監(jiān)測掛載點(diǎn)是否存在
????then?#掛載點(diǎn)?不存在
????????zenity?--error?--title="錯(cuò)誤信息"?--text="掛載目錄$MOUNTPOINT不存在"
????????exit?1
????fi
}
###檢測所指定的掛載點(diǎn)是否為目錄
function?checkMountPoint_Directory(){
????if?[?!?-d?$MOUNTPOINT?]??#如果掛載點(diǎn)不是一個(gè)目錄
????then
????????enity?--error?--title="錯(cuò)誤信息"?--text="掛載目錄$MOUNTPOINT不是目錄"
????????exit?1
????fi
}
###檢測指定的掛載點(diǎn)是否已經(jīng)被使用
function?checkMountPoint_Mounted(){
????ISMOUNTED=`grep?$MOUNTPOINT?/etc/mtab?|?wc?-c`
????if?[?"$ISMOUNTED"?-gt?"0"?]
????then
????????ISMOUNTED="TRUE"
????else
????????ISMOUNTED="FALSE"
????fi
}
###執(zhí)行?卸載?的操作
function?doUMount(){
????if?[?"$ISMOUNTED"?=?"TRUE"?]
????then
????????zenity?--warning?--title="是否選擇卸載"?--text="掛載目錄$MOUNTPOINT已經(jīng)被占用,必須要先進(jìn)行卸載。\n\n在確認(rèn)卸載以前,請確認(rèn)該卸載操作是安全的!\n\n卸載操作需要root權(quán)限,是否確定要進(jìn)行卸載?"
????????if?[?$??-eq?1?]
????????then
????????????exit?0
????????else
????????????gksu?umount?$MOUNTPOINT??##gksu在圖形界面下切換到超級用戶。
????????????checkMountPoint_Mounted
????????????if?[?"$ISMOUNTED"?=?"TRUE"?]
????????????then
????????????????zenity?--error?--title="卸載失敗"?--text="設(shè)備忙,或其他原因,卸載失敗!"
????????????????exit?1
????????????else
????????????????if?[?"$CHOSED_FUNCTION"?=?"掛載新卷"?]
????????????????then
????????????????????zenity?--info?--title="成功卸載"?--text="原來的卷已經(jīng)成功卸載,即將開始新卷的掛載操作!"
????????????????else
????????????????????zenity?--info?--title="成功卸載"?--text="原來的卷已經(jīng)成功卸載!"
????????????????????exit?0
????????????????fi
????????????fi
????????fi
????fi
}
###執(zhí)行?掛載?的操作
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已經(jīng)被成功掛載到$MOUNTPOINT!\n\n程序?qū)⒆詣?dòng)啟動(dòng)瀏覽器打開該目錄!"
????????nautilus?$MOUNTPOINT????#啟動(dòng)瀏覽器瀏覽新掛載的卷
????else
????????zenity?--error?--title="掛載失敗"?--text="在把文件$ISO_PATH掛載到$MOUNTPOINT時(shí)失敗!"
????fi
????exit?0
}
###################?主程序??####################
choosefunction
if?[?"$CHOSED_FUNCTION"?=?"卸載舊卷"?]????#######卸載舊卷
then
????getMountPoint
????checkMountPoint_Exist
????checkMountPoint_Directory
????checkMountPoint_Mounted
????
????if?[?"$ISMOUNTED"?=?"TRUE"?]????????########是否需要卸載
????then
????????doUMount
????else
????????zenity?--info?--title="無須卸載"?--text="指定目錄并未曾掛載任何文件卷!"
????????exit?0
????fi
else????##########掛載新卷
????getISOPath
????getMountPoint
????checkMountPoint_Exist
????checkMountPoint_Directory
????checkMountPoint_Mounted
????if?[?"$ISMOUNTED"?=?"TRUE"?]????########是否需要卸載
????then
????????doUMount
????fi
????doMount
????
fi
exit?0
##################################################################################
#??
#??? GMountISO 一個(gè)掛載在GNOME環(huán)境下掛載iso文件的小小小腳本
#?????作者:xiaosilent
#?? ? Email:xiaosilent@gmail.com
#?????版本:0.3
#?????依賴:zenity
#?????用法:
#????????1,圖形界面下,直接執(zhí)行腳本,也可復(fù)制到~/gnome2/nautilus-scripts/下,這樣將在nautilus的上下文菜單中出現(xiàn)script項(xiàng)。
#????????2.1終端下,直接執(zhí)行腳本,和圖形界面下一樣
#????????2.2終端下,./mountiso?iso_path?mount_path?直接完成掛載
#
##################################################################################
###################?定義變量?##########################################
ISO_PATH=$1????????#iso文件路徑,從第一個(gè)參數(shù)里獲取
MOUNTPOINT=$2????#掛載點(diǎn),第二個(gè)參數(shù)
CHOSED_FUNCTION=""????#功能選擇,掛載/卸載
ISMOUNTED=""????#掛載點(diǎn)是否已經(jīng)被占用
###################?一些功能模塊?#######################################
###功能選擇?掛載/卸載
function?choosefunction(){
????CHOSED_FUNCTION=`zenity?--title="選擇要執(zhí)行的操作"?--list?--width=100?--radiolist?--column="是否選中"?--column="操作類型"?TRUE?"掛載新卷"?FALSE?"卸載舊卷"`
????if?[?"$?"?-eq?"1"?]
????then
????????echo?"沒有選擇,直接退出"
????????exit?0
????fi
}
###獲取ISO文件的路徑
function?getISOPath(){
????if?[?"$ISO_PATH"?=?""?]??#命令行參數(shù)為空
????then
????????ISO_PATH=`zenity?--file-selection?--title?"選擇要掛載的ISO文件"?--filename="~"`????#彈出文件選擇對話框
????????if?[?"$ISO_PATH"?=?""?]????#從文件對話框"取消",給出提示信息,程序退出。
????????then
????????????zenity?--error?--title="錯(cuò)誤信息"?--text="您沒有指定要掛載的ISO文件!"
????????????exit?1
????????fi
????fi
????if?[?`file?$ISO_PATH?|?grep?"ROM"?|?wc?-c`?-eq?"0"?]
????then
????????zenity?--error?--title="錯(cuò)誤信息"?--text="讀取ISO文件出錯(cuò),請確認(rèn)文件存在且是標(biāo)準(zhǔn)的ISO格式"
????????exit?1
????fi
}
###獲取掛載點(diǎn)路徑
function?getMountPoint(){
????if?[?"$MOUNTPOINT"?=?""?]????#沒有從命令行里制定掛載路徑
????then
????????MOUNTPOINT=`zenity?--file-selection?--directory?--title="請選擇ISO文件掛載目錄"???--filename="/media/iso"`
????????if?[?"$MOUNTPOINT"?=?""?]????#選擇了?"取消",給出提示信息,程序退出。
????????then
????????zenity?--error?--title="錯(cuò)誤信息"?--text="您沒有指定掛載目錄"
????????exit?1
????????fi
????fi
}
###檢測掛載點(diǎn)是否存在
function?checkMountPoint_Exist(){
????if?[?!?-e?$MOUNTPOINT?]???#監(jiān)測掛載點(diǎn)是否存在
????then?#掛載點(diǎn)?不存在
????????zenity?--error?--title="錯(cuò)誤信息"?--text="掛載目錄$MOUNTPOINT不存在"
????????exit?1
????fi
}
###檢測所指定的掛載點(diǎn)是否為目錄
function?checkMountPoint_Directory(){
????if?[?!?-d?$MOUNTPOINT?]??#如果掛載點(diǎn)不是一個(gè)目錄
????then
????????enity?--error?--title="錯(cuò)誤信息"?--text="掛載目錄$MOUNTPOINT不是目錄"
????????exit?1
????fi
}
###檢測指定的掛載點(diǎn)是否已經(jīng)被使用
function?checkMountPoint_Mounted(){
????ISMOUNTED=`grep?$MOUNTPOINT?/etc/mtab?|?wc?-c`
????if?[?"$ISMOUNTED"?-gt?"0"?]
????then
????????ISMOUNTED="TRUE"
????else
????????ISMOUNTED="FALSE"
????fi
}
###執(zhí)行?卸載?的操作
function?doUMount(){
????if?[?"$ISMOUNTED"?=?"TRUE"?]
????then
????????zenity?--warning?--title="是否選擇卸載"?--text="掛載目錄$MOUNTPOINT已經(jīng)被占用,必須要先進(jìn)行卸載。\n\n在確認(rèn)卸載以前,請確認(rèn)該卸載操作是安全的!\n\n卸載操作需要root權(quán)限,是否確定要進(jìn)行卸載?"
????????if?[?$??-eq?1?]
????????then
????????????exit?0
????????else
????????????gksu?umount?$MOUNTPOINT??##gksu在圖形界面下切換到超級用戶。
????????????checkMountPoint_Mounted
????????????if?[?"$ISMOUNTED"?=?"TRUE"?]
????????????then
????????????????zenity?--error?--title="卸載失敗"?--text="設(shè)備忙,或其他原因,卸載失敗!"
????????????????exit?1
????????????else
????????????????if?[?"$CHOSED_FUNCTION"?=?"掛載新卷"?]
????????????????then
????????????????????zenity?--info?--title="成功卸載"?--text="原來的卷已經(jīng)成功卸載,即將開始新卷的掛載操作!"
????????????????else
????????????????????zenity?--info?--title="成功卸載"?--text="原來的卷已經(jīng)成功卸載!"
????????????????????exit?0
????????????????fi
????????????fi
????????fi
????fi
}
###執(zhí)行?掛載?的操作
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已經(jīng)被成功掛載到$MOUNTPOINT!\n\n程序?qū)⒆詣?dòng)啟動(dòng)瀏覽器打開該目錄!"
????????nautilus?$MOUNTPOINT????#啟動(dòng)瀏覽器瀏覽新掛載的卷
????else
????????zenity?--error?--title="掛載失敗"?--text="在把文件$ISO_PATH掛載到$MOUNTPOINT時(shí)失敗!"
????fi
????exit?0
}
###################?主程序??####################
choosefunction
if?[?"$CHOSED_FUNCTION"?=?"卸載舊卷"?]????#######卸載舊卷
then
????getMountPoint
????checkMountPoint_Exist
????checkMountPoint_Directory
????checkMountPoint_Mounted
????
????if?[?"$ISMOUNTED"?=?"TRUE"?]????????########是否需要卸載
????then
????????doUMount
????else
????????zenity?--info?--title="無須卸載"?--text="指定目錄并未曾掛載任何文件卷!"
????????exit?0
????fi
else????##########掛載新卷
????getISOPath
????getMountPoint
????checkMountPoint_Exist
????checkMountPoint_Directory
????checkMountPoint_Mounted
????if?[?"$ISMOUNTED"?=?"TRUE"?]????########是否需要卸載
????then
????????doUMount
????fi
????doMount
????
fi
exit?0
暫時(shí)還只實(shí)現(xiàn)了這么點(diǎn)功能,不過,目前暫時(shí)夠本人用了,所以,暫時(shí),這個(gè)腳本就是這樣了。
剛才,搜索了一下mountiso,出來一個(gè)kde下的東東,所以,我這個(gè)mountiso就不能再存在了,現(xiàn)在換成 GMountISO。