接到一个神秘的需求,我用golang写了一个工具

某天逛csdn时遇到个同学求助做一个脚本,脚本中需要循环执行三条命令。很快啊,我就给出了一个shell脚本方案。

#! /bin/sh
a=0
while [ $a -lt 1 ]
do
        build/bladebit -n 1 -f x -c x /path1
        build/bladebit -n 1 -f x -c x /path2
        build/bladebit -n 1 -f x -c x /path3
        sleep 1
done
 

问题就来了,这个神秘的需求是一个疯狂写硬盘程序,硬盘很快就满了。而脚本中根本就没有停下来的意思,这显然就不合理了。

于是在每个命令执行结束之后,判断其结果,当执行失败时停止脚本。

#! /bin/sh
a=0
while [ $a -lt 1 ]
do
        build/bladebit -n 1 -f x -c x /path1
        if [ $? -ne 0 ];then
            echo "bladebit path1 failed, exit"
            break
        fi
        build/bladebit -n 1 -f x -c x /path2
        if [ $? -ne 0 ];then
            echo "bladebit path2 failed, exit"
            break
        fi
        build/bladebit -n 1 -f x -c x /path3
        if [ $? -ne 0 ];then
            echo "bladebit path3 failed, exit"
            break
        fi
        sleep 1
done

这样还是不能很好的满足要求,只要一个盘满了脚本就停了。所以,继续优化需求。需求就用一个性能好的硬盘来生成文件,但为了防止盘满了,要及时把文件移走。

为了不影响生成文件的执行,拆分成两个独立的脚本。一个脚本负责生成文件,如果生成失败了,停止脚本;另外一个脚本则负责移走已生成文件,提供了多个目标硬盘,循环均匀移动到硬盘中。

这个用脚本也很好解决:循环扫描目录中是否生成新文件(使用ls命令结果),然后将目标移动到目标地址(多个硬盘组成多个目标地址数组)

#! /bin/bash
 
ckpath=待移动文件所在目录
ckfile=文件关键字(用于查找文件)
dstPath=(目标地址1 目标地址2 目标地址3 ....)
dstPos=0

mvFileTo() {
   
    if [ ! -d $ckpath ];then
        echo "${ckpath} not exist"
        return 1
    fi
    cd $ckpath
    files=$(ls $ckpath)
    for file in ${
   files[@]}
    do
        if [[ $file != ${
   ckfile}* ]]; then
            echo "${file} skip"
            continue
        fi
        # 过滤临时文件
        if [[ $file == ${
   ckfile}*\.tmp ]]; then
            echo "${file} skip"
            continue
        fi
        source=${
   ckpath}/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

togolife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值