Bash 基本脚本
我已经编写了一个脚本,用它们的项目名称找出系统上运行的当前进程。但是在执行脚本后,我得到了太多状态代码为0的行作为输出。有人能帮我一下吗?我对脚本还不熟悉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
#!/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)