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

文章目录

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

前言

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>&-      #关闭文件描述符的写                

你可能感兴趣的:(Linux,shell,bash)