当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : shell中变量自加导致崩溃,请教大家
帖子发表于 : 2011-03-03 15:16 

注册: 2006-03-27 19:28
帖子: 51
送出感谢: 0 次
接收感谢: 0 次
我这边有个shell脚本,里面会反复调用函数,像这样:

代码:
set +e

ECHO "unpacking source/lib/ncurses-5.5"
mkdir -pv source/lib
run_command_progress_float "tar -xvzf pub/tarball/ncurses-5.5.tgz -C source/lib/" 0     "tar -tzf pub/tarball/ncurses-5.5.tgz | wc -l"

ECHO "unpacking source/lib/expat-1.95.8"
mkdir -pv source/lib
run_command_progress_float "tar -xvzf pub/tarball/expat-1.95.8.tgz -C source/lib/" 0     "tar -tzf pub/tarball/expat-1.95.8.tgz | wc -l"

.......


函数run_command_progress_float是这样的:
代码:
# $1: command
# $2: total
# $3: command to calc totals
run_command_progress_float()
{
    local readonly RCP_RANGE=50
    local rcp_lines=0
    local rcp_nextpos=1
    local rcp_total=0
    local progress_bar=
    local rcp_prog=0
    local rcp_tmp=0
    local prog_bar_base=
    local rcp_percent=0

    ECHO "run_command_progress_float: '$1'"

    if [ -n "$3" ] ;
    then
        echo -n "Initializing progress bar ..."
        rcp_total=`eval $3`;
        echo -n "\r"
        [ -z "$rcp_total" ] && rcp_total=1
    else
        [ -n "$2" ] && rcp_total=$2
    fi

    [ -z "$rcp_total" ] && rcp_total=1
    [ $rcp_total -le 0 ] && rcp_total=1

    prog_bar_base="[    ]"

    while [ $rcp_tmp -lt $RCP_RANGE ]
    do
        prog_bar_base="$prog_bar_base-"

       ((rcp_tmp++))
#        ((rcp_tmp+=1))
#        rcp_tmp=$[rcp_tmp+1]

#        echo "rcp_tmp=$rcp_tmp"
    done
    prog_bar_base="${prog_bar_base}|"
    printf "\r$prog_bar_base\r"

    set +e
    eval $1 | while read line
    do
        ((rcp_lines++))

        if [ $rcp_lines -ge $rcp_nextpos ]
        then
            rcp_percent=`expr \( $rcp_lines \* 101 - 1 \) / $rcp_total `
            rcp_prog=`expr \( $rcp_lines \* \( $RCP_RANGE + 1 \) - 1 \) / $rcp_total `
            [ $rcp_prog -gt $RCP_RANGE ] && rcp_prog=$RCP_RANGE
            rcp_nextpos=`expr \( \( $rcp_percent + 1 \) \* $rcp_total \) / 100`
            [ $rcp_nextpos -gt $rcp_total ] && rcp_nextpos=$rcp_total

            rcp_tmp=0
            progress_bar=""
            while [ $rcp_tmp -lt $rcp_prog ]
            do
                progress_bar="$progress_bar#"
                ((rcp_tmp++))
            done
            printf "\r$prog_bar_base\r[%3d%%]$progress_bar\r" $rcp_percent
        fi
    done
    set -e

    echo ""
}


现在问题就出在while [ $rcp_tmp -lt $RCP_RANGE ]循环中的((rcp_tmp++))这句上,run_command_progress_float只能成功执行一次,第二次执行时跑到 ((rcp_tmp++))就会崩溃,退出脚本,而我把这句改为((rcp_tmp+=1))或者rcp_tmp=$[rcp_tmp+1]就没有问题。
不知到是怎么回事,请大家帮忙看看,应该怎么写。
谢谢!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: shell中变量自加导致崩溃,请教大家
帖子发表于 : 2011-03-08 9:11 

注册: 2006-03-27 19:28
帖子: 51
送出感谢: 0 次
接收感谢: 0 次
期待大家的回复。。。。。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: shell中变量自加导致崩溃,请教大家
帖子发表于 : 2011-03-12 8:02 

注册: 2009-07-01 22:04
帖子: 919
送出感谢: 0 次
接收感谢: 13
半边脚本, 如何追踪数据变化? 有时代码正确而逻辑错误轻微就足以产生大问题。


_________________
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: shell中变量自加导致崩溃,请教大家
帖子发表于 : 2011-03-31 9:18 

注册: 2007-10-22 22:40
帖子: 125
送出感谢: 0 次
接收感谢: 0 次
不太好懂 没啥注释


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译