bash 脚本批量处理文件并将文件扔给程序

前言

Linux下我们经常会写一些shell脚本来辅助我们学习或者工作,从而提高效率。
之前就写过一篇博客:Linux下利用shell脚本批量产生内容有规律变化的文件

程序

批量造 case 并将 cmd 扔给程序运行


#!/bin/bash

#num_args=$#
#if [ $num_args != 2 ]; then
#  echo
#  echo " Usage: $0 cases temp.cmd"
#  echo
#  exit
#fi

runNumTask=10
topPath=`pwd`

case_path="/home/cases/"
case_list="/home/case_list"
cmd_option="/home/cmd.option"
totalCaseNum=`sed -n '$=' $case_list`
echo "totalCaseNum: "$totalCaseNum


start_time=`date +%s`    #定义脚本运行的开始时间

[ -e /tmp/fd1 ] || mkfifo /tmp/fd1 #创建有名管道
exec 3<>/tmp/fd1    #创建文件描述符,描述符(FD)只能是数字,以可读(<)可写(>)的方式关联管道文件,这时候文件描述符3就有了有名管道文件的所有特性               
rm -rf /tmp/fd1     #关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了               

for ((i=1;i<=${runNumTask};i++)) do
    echo >&3      #&3代表引用文件描述符3,这条命令代表往管道里面放入了一个"令牌"             
done

#for ((i=1;i<=10;i++)) do
for case in `cat $case_list`; do 
  read -u3      #代表从管道中读取一个令牌                      
  {
    cd $case_path
    cd $case
    cp $cmd_option ./cmd
    sed -i "s/pattern/$case/g" ./cmd
       
    # 程序 运行
    program -i cmd -o $case.out >& $case.log
    #echo 'success'$i       
    echo >&3      #代表我这一次命令执行到最后,把令牌放回管道             
  }&
done

wait
stop_time=`date +%s`   #定义脚本运行的结束时间
echo "TIME:`expr $stop_time - $start_time`" 

exec 3<&-      #关闭文件描述符的读                  
exec 3>&-      #关闭文件描述符的写                

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值