#! /bin/bash# Author : Jiahuan Li
# License: GPLv2# Date : 2007/06/22
# Desc : make use of cdrocord to burn cd/dvd diskERASE=# 擦除RW光盘
BURN= # 烧刻## 检查是否已经安装cdrecordwhich cdrecord &>/dev/null || {
echo"cdrecord not installed"exit 127
}## 用法usage () {
cat <
用法:$0[ options ] [ xxx.iso ]
options:
-e 擦除RW光盘
-b 刻录
-h 打印本条帮助信息
说明:
对于CD-R/DVD-R来说, 不需要指定options, 指定iso后直接刻录
对于CD-RW/DVD-RW来说, 需要先擦写再记录,即需要指定 -e -b 参数
EOF
exit 1
}## 要求至少有一个参数
[[ -n $1 ]] || usagewhile getopts 'ebh' opt; do
case$optin
e)ERASE=true;;
b)BURN=true;;
*)
usage;;
esac
done## 去掉 -e/-b, iso=xxx.iso
shift $(( OPTIND -1 ))iso=$1## 检查$iso是否为iso文件[[ -n$iso]] && {
file$iso| grep -q 'ISO 9660';RC=$?
[[$RC!= 0 ]] && {
echo"Target is not a ISO file, aborting ..."exit 127
}
}## 导入usb光驱驱动模块, 一般不需要手工导入,udev在开机时会加载## 止处是防止模块被列入黑名单#modprobe sr_mod 2>/dev/null
#modprobe sg 2>/dev/nullmodprobe sr_mod 2>/dev/null
modprobe sg 2>/dev/null## 探测刻录光驱是哪个设备
if [[ -e /dev/cdrw ]]; then
rw_dev=/dev/cdrwelif [[ -e /dev/dvdrw ]]; thenrw_dev=/dvdrw
elserw_dev=$( cdrecord -scanbus 2>/dev/null | awk '/RW/ {print$1}' )
fi## 找不到刻录光驱,退出[[ -z$rw_dev]] && {
echo"Can not found RW device, aborting ..."exit 127
}
echo"Found RW device: $rw_dev"## umount先
umount $rw_dev 2>/dev/nullRC=0## 如果没有指定要擦除或刻录,则直接刻录( CD-R, DVD-R 盘不用擦,直接刻 )if [[ -z"$ERASE$BURN"]]; then
cdrecorddev=$rw_devblank=fast && cdrecorddev=$rw_dev$iso;
else## 如果指定擦盘[[ -n$ERASE]] && { cdrecorddev=$rw_devblank=fast;RC=$?; }## 如果指定刻盘[[ -n$BURN]] && (( RC == 0 )) && [[ -n$iso]] && cdrecorddev=$rw_dev$isofi## modprobe -r cdrom sg sg_mod sr_mod 2>/dev/null## 弹出光驱{ eject && sleep 5 && eject -t; } &>/dev/null &