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