Bash 基本脚本

Bash 基本脚本,bash,shell,unix,scripting,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

我已经编写了一个脚本,用它们的项目名称找出系统上运行的当前进程。但是在执行脚本后,我得到了太多状态代码为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
#/bin/bash
dsjob-lprojects>ProjectName.txt#获取服务器上运行的datastage项目名称
ps-ef | grep DSD.RUN | cut-d”“-f21>Currentjoblog.txt#这将包含服务器上当前正在运行的作业
对于i,单位为美元($i.txt
以美元表示的j(<$i.txt);做
cat$Currentjoblog.txt |在读取行时
做
如果[x$j==x$LINE];然后
回显“$i------$LINE”
fi

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

dsjob -lprojects|while read l1; do
     dsjob -ljobs $l1|while read l2; do
         # you could use $l2 here
         # ...
     done
done
下面是如何在Bash中通过循环读取命令输出或文件内容的提示:

否则:

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

这里提醒您有必要(或没有必要)用双引号保护变量:。

也许您想使用哪个“根据名称和其他名称查找或通知进程”

例如:

$> pgrep $(dsjob -lprojects)

使用习惯用法
x$var=xstring
测试字符串只在非常旧的shell中需要,这些shell很可能无法识别
=
的有效性(它们通常运行在
test
(又称
[
)命令需要
=/code>的系统上)。
if [ x$j == x$LINE ] ;then
    # ...
fi
$> pgrep $(dsjob -lprojects)