欢迎访问linux宝典,请记住本站唯一域名:www.linuxbaodian.com

shell--计算漏水时长

来源:原创    更新时间:2018-10-01 16:00:32    编辑:jason    浏览:386

                    某蓄水池有甲,丙两条进水管和乙,丁两条排水管,要灌满一池水,单开甲需要3个小时,单开丙管需要5小时 ,要排光一池水,单开乙管需要4小时,单开丁管需要6小时,现在池内有1/6池水,如果按照甲乙丙丁的顺序,循环开各水管,每次每管开一小时。问多少时间后水池开始溢水?



·         [root@linuxbaodian scripts]# vim bc_water.sh
·         1 #!/bin/bash
·           2 <<eof
·           3 某蓄水池有甲,丙两条进水管和乙,丁两条排水管,要灌满一池水,单开甲需要3个小时,单开丙管需要5小时
·             ,要排光一池水,单开乙管需要4小时,单开丁管需要6小时,现在池内有1/6池水,如果按照甲乙丙丁的顺序>
·             ,循环开各水管,每次每管开一小时。问多少时间后水池开始溢出水?
·           4 eof
·           5 #define water speed
·           6 a=`echo "scale=2;1/3"|bc`
·           7 b=`echo "scale=2;1/4"|bc`
·           8 c=`echo "scale=2;1/5"|bc`
·           9 d=`echo "scale=2;1/6"|bc`
·          10 e=`echo "scale=2;1/6"|bc`
·          11 #define remaining water
·          12 f=`echo "1-$e"|bc`
·          13 #define every hour water speed
·          14 g=$(echo "$a-$b+$c-$d"|bc)
·          15 #define How long does it take to fill up
·          16 jg=$(echo "$f/$g"|bc)
·          17 #print result
·          18 echo $jg
·         [root@linuxbaodian scripts]# sh bc_water.sh
·         7 小时

方法2:

#!/bin/bash
export PATH=$PATH
. /etc/rc.d/init.d/functions
<<EOF
1,首先我们要确定出来这个水池的容量是多大,我们假设水池容量是max
那么max=3*j=5*b=4*y=6*d
甲的流速/分钟 = max/3/60
定义水满为1
定义一个现在水池里面水的容量
MIN=$(echo max / 6 | bc)
for j in seq 1 60
MIN=$(echo $max / 180 + MIN | bc )
TIME=$(echo )
meet () {
if [ $MIN -eq $max ];then
echo $time && exit 0
fi
}
EOF
<<R
#定义水满为100
当前的水量定为W
当前经历的时间为TIME分钟
R
#定义MIN的预先变量
MIN=$(awk 'BEGIN{printf"%.2f",100/6}')
echo $MIN
#甲每分钟的流速
lj=$(awk 'BEGIN{printf"%.2f",100/180}')
#乙每分钟的流速
ly=$(awk 'BEGIN{printf"%.2f",100/320}')
#丙每分钟的流速
lb=$(awk 'BEGIN{printf"%.2f",100/300}')
#丁每分钟的流速
ld=$(awk 'BEGIN{printf"%.2f",100/360}')
#定义判断水量是否达到1的函数,应为每个循环里面都要重复调用
meet_jia () {
    TIME=$(expr $TIME + 1)
    MIN=$(awk 'BEGIN{printf"%.2f","'$MIN'"+"'$1'"}')
    if [ $(echo "$MIN >= 100" | bc) -eq 1  ];then
        echo "scale=1;$TIME/60" | bc  && break 2
    fi
}
meet_jian () {
    TIME=$(expr $TIME + 1)
    MIN=$(awk 'BEGIN{printf"%.2f","'$MIN'"-"'$1'"}')
    if [ $(echo "$MIN >= 100" | bc) -eq 1   ];then
        echo "scale=1;$TIME / 60" | bc  && break 2
    fi
}
for ((a=1 ; a<2; a--))
do
    for i in `seq 60`
    do
        meet_jia $lj
    done
    for i in `seq 60`
    do
        meet_jian $ly
    done
    for i in `seq 60`
        do
        meet_jia $lb
    done
    for i in `seq 60`
    do
        meet_jian $ld
    done
done


评论区

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

相关内容

点击排行

随机新闻

评论排行榜