首页 > 解决方案 > 在 UNIX shell 脚本中为每“n”次执行引入等待时间

问题描述

我有 2 个文件:file.datmapping.dat

file.dat包含条目(可以包含重复项),mapping.dat是一个静态文件,其中包含条目及其对应的会话/作业名称,以逗号分隔。我开发了一个简单的 UNIX Shell 脚本,它在循环中运行,对于 file.dat 中的每个条目,它会在 mapping.dat 中搜索会话/作业名称并显示输出。

file.dat 的内容

ekm
ckm
cnc
cnx
ekm
hnm
dam

mapping.dat 的内容

#Entry,Job_Name#

ckm,BDSCKM
cnc,BDSCNC
cnx,BDSCNX
ekm,BDSEKM
azm,BDSAZM
bam,BDSBAM
cam,BDSCAM
oid,BDSOID
hnm,BDSHNM
dam,BDSDAM

当前脚本:

#!/bin/ksh
for FILE in `cat file.dat`
do
        SESSION=`grep $FILE mapping.dat | cut -d, -f2`
        echo "For ${FILE}, Session launched is: ${SESSION} "
done

电流输出

For ekm, Session launched is: BDSEKM 
For ckm, Session launched is: BDSCKM 
For cnc, Session launched is: BDSCNC 
For cnx, Session launched is: BDSCNX
For ekm, Session launched is: BDSEKM 
For hnm, Session launched is: BDSHNM 
For dam, Session launched is: BDSDAM 

我的问题是我想为每 2 次输出引入一个等待/睡眠时间,即它应该首先显示

For ekm, Session launched is: BDSEKM 
For ckm, Session launched is: BDSCKM

等待 90 秒,然后

For cnc, Session launched is: BDSCNC 
For cnx, Session launched is: BDSCNX

..等等

标签: unixksh

解决方案


尝试使用模运算符 %帮助自己。

#!/bin/ksh
count=1
for file in $( cat file.dat )
do

  session=$( grep $file mapping.dat | cut -d, -f2 )
  echo "For ${file}, session launched is ${session}."

  if (( count % 2 == 0 ))
  then
    sleep 90
  fi
  (( count++ ))
done

推荐阅读