基本脚本

时间:2014-01-17 12:52:17

标签: bash shell unix scripting

我已经编写了一个脚本来查找系统上运行的当前进程及其项目名称。但是在执行脚本后我得到太多的行,状态代码= 0作为输出。任何人都可以帮助我这个我是新的编写脚本。

 #!/bin/bash
 dsjob -lprojects >ProjectName.txt   #Fetching the datastage project name running on the             server                  

 ps -ef | grep DSD.RUN | cut -d" " -f21 > Currentjoblog.txt  #this will contains the     current running job on the server

 for i in $(< ProjectName.txt);do
 dsjob -ljobs $i > $i.txt 
 for j in $(< $i.txt);do
 cat $Currentjoblog.txt | while read LINE
 do
 if [ x$j == x$LINE ] ;then
  echo "$i-------$LINE"
 fi
 done <"$CurrentJoblog.txt"
 done
 done

2 个答案:

答案 0 :(得分:2)

首先,您不需要使用临时文件:

dsjob -lprojects|while read l1; do
     dsjob -ljobs $l1|while read l2; do
         # you could use $l2 here
         # ...
     done
done

以下是关于如何使用Bash中的循环读取命令输出或文件内容的提醒:here

否则:

cat $Currentjoblog.txt | while read LINE
do
    # ...
done <"$CurrentJoblog.txt"

这种语法错了。您要么读取cat的输出,要么通过重定向读取文件内容,而不是两者都读取(请参阅我之前的链接以获得正确的语法)。

否则:

if [ x$j == x$LINE ] ;then
    # ...
fi

当您使用命令test[语法而不是[[时,您必须使用双引号保护变量。我还认为前面操作数的x是错误;)

以下是关于使用双引号保护变量的必要性(或不是)的提示:here

答案 1 :(得分:0)

也许您想使用pgrep “查找或根据名称和其他信号发送流程”

示例:

$> pgrep $(dsjob -lprojects)
相关问题