LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1411|回复: 6

如何判斷程序結束?

[复制链接]
发表于 2003-5-26 00:36:00 | 显示全部楼层 |阅读模式
在shell中運用curl 分3部份download一個文件
如何判斷這3個curl下載結束

以便運行cat abc.zip? >abc.zip
发表于 2003-5-26 00:55:29 | 显示全部楼层
用检测状态返回值是否为零的方法试试!如可以用until语句,
until command  //如果command的返回值是0,那么就执行done后面的命令,否则,什么也不作!
do
:
done
echo "ok"
do somecommand
 楼主| 发表于 2003-5-26 11:34:20 | 显示全部楼层
這在freebsd上確?可以正確download的

#! /bin/sh
#part path
clear
if [ $1 -gt "1000" ];then
echo "sorry !!! too much"
exit
fi
#size=`fetch -s $2`
size=`curl -s -I $2 | grep Length | cut -d: -f2 | sed -e 's/^  *//' | col -bx`
part=$1
echo
echo "`date`:  start....."
value=$(($(($size / $part)) + 1))
ph=1
while [ 1 ]
do
   for i in 0 1 2 3 4 5 6 7 8 9
     do
        for j in  0 1 2 3 4 5 6 7 8 9
           do
              for k in  0 1 2 3 4 5 6 7 8 9
                do
                  if [ "$no" -eq "$1" ]; then
                  exit
                  fi
                  no=`echo $i$j$k`
                  n=$(($ph - 1))
                  if [ $1  -le "10" ]
                  then
                  curl  -r $(($value \* $n))-$(($(($value \* $ph)) - 1)) -o `basename $2`.`echo $i$j$k | sed -e 's/^..//'` $2 &

                  elif [ $1  -gt "100" ]
                  then
                   curl -r $(($value \* $n))-$(($(($value \* $ph)) - 1)) -o `basename $2`.$i$j$k $2 &
                  else
                   curl -r $(($value \* $n))-$(($(($value \* $ph)) - 1)) -o `basename $2`.`echo $i$j$k | sed -e 's/^.//'` $2 &
                  fi
                  ph=$(($ph+1))
                  done
             done
        done
done



kan4看java兄應該知道他的意四
发表于 2003-5-26 14:38:13 | 显示全部楼层
不错!可以放在置顶的[欣赏]里收藏,;)你帖的时候请注明作者,OK?
其实,判断一个程序是否已经结束,可以从进程看得出来!任务在运行当中的话,进程中肯定有他的任务号和进程名!没有必要那么复杂(个人看法,我没有用过curl)如:我在后台有个任务在运行,如果这个任务结束了,就提醒你!我举个简单的例子,希望探讨!
javalee//home/javalee>xterm -e top -n 100 &
[1] 1725
javalee//home/javalee>while
> do
> if ps -e|grep xterm >/dev/null
> then
> sleep 1
> else
> echo "program is done\n"
> exit 0
> fi
> done&
[2] 1891

javalee//home/javalee>program is done
javalee//home/javalee>
发表于 2003-5-26 16:18:50 | 显示全部楼层
bash里面,#?是程序返回值,用它就可以判断了
 楼主| 发表于 2003-5-26 20:12:06 | 显示全部楼层
這貼子我也在chinaunix發過,是同一人
penny兄的程序返回值在這理似乎挺複雜的,不之如何下手.
java兄的作法比較簡單直接..(但是只系想想,卻有個限制,對於同時下在多個文件的問題...)
ok 現在暫時算是完成了..感謝java兄以及   penny兄

(申明一點,只能在freebsd上運行,在linux上有語法錯誤)
 楼主| 发表于 2003-5-26 20:18:37 | 显示全部楼层
  1. #! /bin/sh
  2. #part path
  3. clear
  4. if [ $1 -gt "1000" ];then
  5. echo "sorry !!! too much"
  6. exit
  7. fi
  8. #size=`fetch -s $2` #it's ok in freebsd
  9. size=`curl -s -I $2 | grep Length | cut -d: -f2 | sed -e 's/^  *//' | col -bx`
  10. part=$1
  11. echo
  12. echo "`date`:  start....."
  13. value=$(($(($size / $part)) + 1))
  14. ph=1

  15. while [ 1 ]
  16. do
  17.    for i in 0 1 2 3 4 5 6 7 8 9
  18.      do
  19.         for j in  0 1 2 3 4 5 6 7 8 9
  20.            do
  21.               for k in  0 1 2 3 4 5 6 7 8 9
  22.                 do
  23.                   if [ "$no" -eq "$1" ]; then
  24.                   exit
  25.                   fi
  26.                   no=`echo $i$j$k`
  27.                   n=$(($ph - 1))
  28.                   if [ $1  -le "10" ]
  29.                   then
  30.                   curl  -r $(($value \* $n))-$(($(($value \* $ph)) - 1)) -o `basename $2`.`echo $i$j$k | sed -e 's/^..//'` $2 &
  31.                   
  32.                   elif [ $1  -gt "100" ]
  33.                   then
  34.                    curl -r $(($value \* $n))-$(($(($value \* $ph)) - 1)) -o `basename $2`.$i$j$k $2 &
  35.                   else
  36.                    curl -r $(($value \* $n))-$(($(($value \* $ph)) - 1)) -o `basename $2`.`echo $i$j$k | sed -e 's/^.//'` $2 &
  37.                   fi
  38.                   ph=$(($ph+1))
  39.                   done
  40.              done
  41.         done

  42. done&
  43. sleep 5
  44. while [ 1 ]
  45. do
  46. if ps -e|grep curl >/dev/null
  47. then
  48.    sleep 1
  49. else
  50.    cat `basename $2`.* >`basename $2`
  51.    rm `basename $2`.*
  52.    echo ok
  53.    exit 0
  54. fi
  55. done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表