sh/bash/dash/ksh/zsh等Shell脚本
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#1
帖子
由 ghostry » 2010-07-26 18:05
代码: 全选
#! /bin/bash
##从/dev/cdrom创建iso
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):"`
#echo $iisoname
#dd if=/dev/cdrom of=$isoName | zenity --progress --text="请等待, 正在读取CD ..."
zenity --info --text="此进度条无效,如确定按钮可用则表示进程已结束。中途无法取消。"
#dd if=/dev/cdrom of=$isoName
#dd if=/dev/cdrom of=$isoName& while [ -e /proc/$! ];do echo -n '.';sleep 1;done
i=0
dd if=/dev/cdrom of=$isoName& while [ -e /proc/$! ];do echo -n $i;i=$i+1;sleep 1;done|zenity --progress --text="请等待, 正在读取CD ..."
上次由
ghostry 在 2010-07-27 13:40,总共编辑 1 次。
-
fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
#2
帖子
由 fanhe » 2010-07-27 0:02
zenity的进度条我也搞不懂
API过于简陋,不好搞
我建议还是用虚拟终端的脚本好一点,信息也全
要不就用python的gtk或者qt来得实际点
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#3
帖子
由 aerofox » 2010-07-27 6:33
看看楼主能不能将脚本改成这个样子:
代码: 全选
#!/bin/bash
##从/dev/cdrom创建iso
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):"`
dd if=/dev/cdrom of=$isoName&
while [ -e /proc/$! ]; do
percentage=$(( )) # (( )) 中填上计算百分比的表达式
printf "#请等待, 正在读取CD .... %d%%\n" $percentage
echo $percentage
sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..."
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#5
帖子
由 ghostry » 2010-07-27 9:27
代码: 全选
$ df /dev/sr0
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sr0 466516 466516 0 100% /media/MFL_PRO
找到了这个命令,但是不知道怎么吧466516这数值单独分离出来
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#6
帖子
由 ghostry » 2010-07-27 10:33
代码: 全选
#! /bin/bash
##从/dev/cdrom创建iso
cdsize=`df /dev/sr0`
isoname=`echo $cdsize|awk -F"[ ]" '{print $12}'|awk -F"[/]" '{print $3}'`
#isoname=`echo $isoname.iso|awk '{ gsub(/ /, "_"); print }'` #取得默认文件名
isoname=`echo $isoname.iso`
cdsize=`echo $cdsize|awk -F"[ ]" '{print $9}'` #获取光盘总大小单位kb
#echo $cdsize
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):" --entry-text=$isoname`
if [ ! $isoName = "" ];then
dd if=/dev/cdrom of=$isoName&
while [ -e /proc/$! ]; do
filesize=`stat -c %s $isoName`
let percentage=$filesize/$cdsize*100/1024
printf "#请等待, 正在读取CD .... %d%%\n" $percentage
echo $percentage
sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..."
fi
目前就是不能点击取消的时候把dd的进程结束掉。。
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#7
帖子
由 aerofox » 2010-07-27 12:13
在 dd 命令后将进程号保存到 dd_pid 中,然后在 zenity 命令后加 || kill $dd_pid,应该可以用实现楼上要的功能。
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#8
帖子
由 ghostry » 2010-07-27 12:55
代码: 全选
#! /bin/bash
##从/dev/cdrom创建iso
cdsize=`df /dev/sr0`
isoname=`echo $cdsize|awk -F"[ ]" '{print $12}'|awk -F"[/]" '{print $3}'`
#isoname=`echo $isoname.iso|awk '{ gsub(/ /, "_"); print }'` #取得默认文件名
isoname=`echo $isoname.iso`
cdsize=`echo $cdsize|awk -F"[ ]" '{print $9}'` #获取光盘总大小单位kb
#echo $cdsize
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):" --entry-text=$isoname`
if [ ! $isoName = "" ];then
dd if=/dev/cdrom of=$isoName&
pid_id=$!
echo $pid_id
while [ -e /proc/$! ]; do
filesize=`stat -c %s $isoName`
let percentage=$filesize/$cdsize*100/1024
printf "#请等待, 正在读取CD .... %d%%\n" $percentage
echo $percentage
sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..." ;kill $pid_id
fi
感谢楼上,取消的功能也实现了,目前还有个bug,就是如果光盘卷标带有空格的话,就只能取得前边的一段字符。
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#9
帖子
由 ghostry » 2010-07-27 13:39
代码: 全选
#! /bin/bash
##从/dev/cdrom创建iso
zenity --info --text="请选择您要保存文件的目录(默认为主目录)"
dirName=`zenity --file-selection --directory 2>/dev/null`
if [ $dirName = "" ];then
cd ~/
else
cd $dirName
fi
filesize=0
cdsize=`df /dev/sr0`
isoname=`echo $cdsize|awk -F"[/]" '{print $5}'`
isoname=`echo $isoname.iso|awk '{ gsub(/ /, "_"); print }'` #取得默认文件名
#isoname=`echo $isoname.iso`
cdsize=`echo $cdsize|awk -F"[ ]" '{print $9}'` #获取光盘总大小单位kb
#echo $cdsize
isoName=`zenity --entry --text="请你输入新建iso的文件名 (文件名.iso):" --entry-text=$isoname`
if [ ! $isoName = "" ];then
dd if=/dev/cdrom of=$isoName&
pid_id=$!
#echo $pid_id
while [ -e /proc/$! ]; do
filesize=`stat -c %s $isoName`
let percentage=$filesize/$cdsize*100/1024
printf "#请等待, 正在读取CD .... %d%%\n" $percentage
echo $percentage
sleep 1;
done | zenity --progress --text="请等待, 正在读取CD ..." ;kill $pid_id
fi
完全解决啦