一堆的错误,帮你改了。自己diff一下就明白了。
下次贴问题之前,请确保你的代码能执行……
另外,之所以是串行,是因为你根本就没有执行过文件里的命令,而永远是 sleep 同样长的时间,当然最终的效果就是串行,你可以改成 sleep 随机长的时间,或者确实的执行文件里的命令,就能看到并行效果了 (确保命令做一些 IO *** 作,或者多核cpu)。
#!/bin/bashif [ -z "$1" ]then
echo "Usage:`basename $0` filename(containing the cmd you want to execute)"
exit 1
else
if [ ! -f "$1" ]then
echo "The file \"$1\" you provide doesn't exist!"
exit 1
else
cmdfile=$1
jobnum=`cat $cmdfile|grep -v "^#"|grep -v "^[[:space:]]#"|wc -l`
line=`cat $cmdfile|wc -l`
fi
fi
#创建管道文件,并将其文件描述符设置为6,同时以读写的方式打开它
tmp_fifo="tmp$$.fifo"
mkfifo ${tmp_fifo}
exec 6<> ${tmp_fifo}
#限定线程数的上限
thread=3
for(( i=0i<$threadi++ ))
do
echo
done >&6
for(( j=0j<${line}j++ ))
do
read -u 6
{
read command
if [ -n "`echo $command|grep -v "^#"`" ] && [ -n "`echo $command|grep -v "[[:space:]]#"`" ]then
echo "[`date +"%Y%m%d %H:%M:%S"`]:command is $command,j is $j"
sleep 3
echo "[`date +"%Y%m%d %H:%M:%S"`]:job $j finishes successfully!">>/tmp/multpro_`date +%Y%m%d`.log
fi
#作业完成后向管道文件写回一个按行符
echo >&6
}&
done < "$cmdfile"
wait
exec 6<&-
rm ${tmp_fifo}
exit 0
inux 下shell脚本执行多个命令的方法1.每个命令之间用隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)