當前位置:首頁 » 編程軟體 » 感謝的腳本

感謝的腳本

發布時間: 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