当前位置:首页 » 编程软件 » 感谢的脚本

感谢的脚本

发布时间: 2023-10-31 06:26:48

㈠ 求解释这个perl脚本,非常感谢

warning:Use of uninitialized value in pattern match (m//) at processMonitor.pl line 38
上面这个warn是因为while循环条件里面少了东西,这里应该是<PS>这个句柄
另外,那个exec要执行logger,这个程序有的不在/bin目录下,而在/usr/bin目录下

这个程序大致意思是查看指定的程序是在ps列表中出现的次数

例如,你在命令行执行这个程序
./processMonitor.pl ps klogd
就可以在生成的log文件中看到结果了

下面给你稍微加了些注释,如果基本语法比较熟悉的话,应该可以看懂了

#!/usr/bin/perl -w
#
#name: processMonitor.pl
#written by trizsolo
#usage: ./processMonitor.pl args args args
#you can add as many processes as needed for args
#or use the defaults... syslogd is always checked
#----------------------------
my $user='root';
my $host=`hostname`;
chomp($host);
my $date=`date`;
chomp($date);
my $logfile="$host" . '.log';#以主机名加log后缀的形式命名日志文件
our @proc_list=@ARGV;
# Default list of processes
if(@proc_list==0)#如果不在命令行指定程序名,则默认查看下面的三个程序
{
# check for arguments
@proc_list=('inetd', 'sendmail', 'chkMounts.pl');
}
push(@proc_list, 'syslogd');
# add syslogd to check

# ---------- open logfile and determine Operating System --------------
#以添加的方式打开日志文件,并把要查看的程序名称,日期及系统信息添加到日志文件
open(LOG, ">>$logfile") or die "Can't open $logfile to write: $!";
print LOG "Searching for: @proc_list on $date!\n";
chomp($os=`uname -r`);
print LOG "OS on this server is $os\n";
close(LOG);

# ---------------- call "ps" & analyse output --------------------
#初始化哈希计数表,用来统计指定程序在列表中出现的次数
foreach my $process (@proc_list)
{
$event_count {$process} = 0;
}
#使用管道,使ps的输出作为下面匹配的目标
open(PS, "/bin/ps auwx |") or die "Can't run ps: __FILE__ $!";
$/="\n";
# record seperator
#这个while原来少了东西,应该有上面打开的句柄<PS>
while(<PS>)
{
foreach my $process(@proc_list)
{
if($_ =~(m/$process/i))
{
$event_count {$process}++;
}
}
}
close(PS);
再次打开日志文件,把上面遍历ps列表后的信息写入日志文件
open(LOG,">>$logfile") or die "Cannot open $logfile: $!";
# Add line to log to nagios if needed
foreach $process(@proc_list)
{
if($event_count {$process} ==0)
{
print LOG "Process $process is NOT running!\n";
#这里的logger有的在/usr/bin目录下
system("/bin/logger -p warn Process: $process is NOT running!\n")
== 0 or die "Cannot complete cmd: $! : $?";
}
else
{
print LOG "Process $process occurred $event_count{$process} times!\n";
}
}
close(LOG);
exit 0;
#EOF

㈡ shell脚本进行文件内容替换,求高手指导!感谢!

#!/bin/bash
sed -i '爱好=篮球,足球/c 爱好=排球,围棋,看电影' abc.ini

这样就行了 abc.ini要加绝对路径。

㈢ SHell脚本解释:麻烦哪位把下面的代码仔细注释一下,感谢!

list=`ls -l|grep -v grep|grep -v 0|grep -v export.sh|sort -n|awk {'print $9'}`
| 是管道符,将前面命令的执行结果传递给后面的命令。
学会拆分开来看就不难理解,其实可以一步一步地执行看看结果,比如先执行 ls -l ,再执行ls -l|grep -v grep,再执行ls -l|grep -v grep|grep -v 0,看有什么变化。
这句意思就是,将 ls -l 命令的结果中,去除包含grep、0以及export.sh的行,用sort排序后取出第9列内容(即文件名列表),保存到list变量中。后面的arg即为按顺序从文件名列表中取出的每个文件名。

len=${#arg} #get string len
这一句后面已经有注释了,获取arg字符串长度。

tab=${arg:0:len-4} #get filename not include extend name
这句后面也有注释了,获取文件名中除扩展名外的部分。字面解释,就是获取第0个字符到第(长度-4)个字符之间的字符串(扩展名加.一共4个字符)。

echo "bcp ${tab} in /opt/sybase/sdb/ln_data/${arg} -Uname -Ppwd -Sserver -c -t'||' -r'&&\n' -b10 >>./err.txt 2>&1"
打印 echo 后面的语句。语句中的变量被展开。
我觉得这句有问题,最后的输出重定向 >>./err.txt 2>&1 应该拿到双引号外面来,而且如果仅保存错误信息到err.txt的话,应该写成 2>>./err.txt

热点内容
hp存储扩容 发布:2024-11-17 23:29:16 浏览:569
在ftp中put表示什么 发布:2024-11-17 23:29:12 浏览:383
mvc多文件上传 发布:2024-11-17 23:13:56 浏览:155
玩游戏硬盘缓存32m 发布:2024-11-17 23:03:42 浏览:525
蓝光存储系统 发布:2024-11-17 23:03:41 浏览:436
地平线4提示配置低于最低怎么办 发布:2024-11-17 22:54:38 浏览:610
注册银行卡账户密码填什么 发布:2024-11-17 22:54:35 浏览:537
java压缩上传图片 发布:2024-11-17 22:26:59 浏览:627
plc编程课件 发布:2024-11-17 22:18:23 浏览:469
我的世界服务器信号一直在检测 发布:2024-11-17 22:09:52 浏览:547