linux bash shell 多线程脚本无法并处处理命令

linux bash shell 多线程脚本无法并处处理命令,第1张

一堆的错误,帮你改了。自己diff一下就明白了。

下次贴问题之前,请确保你的代码能执行……  

另外,之所以是串行,是因为你根本就没有执行过文件里的命令,而永远是 sleep 同样长的时间,当然最终的效果就是串行,你可以改成 sleep 随机长的时间,或者确实的执行文件里的命令,就能看到并行效果了 (确保命令做一些 IO *** 作,或者多核cpu)。

#!/bin/bash

if [ -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.每个命令之间用||隔开

说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7349070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存