懂shell脚本的来看看,这个( )>>$logfile是什么意思?,还有while read line;是什么意思?请教了。
IP_LIST="127.0.0.10.0.0.0"#提供远程主机IP地址列表(foripin$IP_LISTdosshslynux@$ip'df-H'|grep^/de...
IP_LIST="127.0.0.1 0.0.0.0"
# 提供远程主机IP地址列表
(
for ip in $IP_LIST
do
ssh slynux@$ip 'df -H' | grep ^/dev/ > /tmp/$$.df
while read line;
do
cur_date=$(date +%D)
printf "%-8s %-14s " $cur_date $ip
echo $line | awk '{ printf("%-9s %-8s %-6s %-6s %-8s", $1,$2,$3,$4,$5); }'
pusg=$(echo $line | egrep -o "[0-9]+%")
pusg=${pusg/\%/};
if [ $pusg -lt 80 ];
then
echo SAFT
else
echo ALERT
fi
done< /tmp/$$.df
done
)>>$logfile 展开
# 提供远程主机IP地址列表
(
for ip in $IP_LIST
do
ssh slynux@$ip 'df -H' | grep ^/dev/ > /tmp/$$.df
while read line;
do
cur_date=$(date +%D)
printf "%-8s %-14s " $cur_date $ip
echo $line | awk '{ printf("%-9s %-8s %-6s %-6s %-8s", $1,$2,$3,$4,$5); }'
pusg=$(echo $line | egrep -o "[0-9]+%")
pusg=${pusg/\%/};
if [ $pusg -lt 80 ];
then
echo SAFT
else
echo ALERT
fi
done< /tmp/$$.df
done
)>>$logfile 展开
1个回答
展开全部
( ) >>$logfile
( )中的语句会在新建shell中执行(产生一个新进程),其中任何语句的标准输出都会被重定向到log文件$logfile中去(追加写方式)。
while read line
do
......
done </tmp/$$.df
读取文件/tmp/$$.df,read命令每次读取一行内容,所以while循环的每次迭代都只处理该文件的一行内容(变量line)。
$$ 表示当前进程的PID,最常见的用途就是用作临时文件的名字以保证文件名不重复。
更多追问追答
追问
pusg=${pusg/\%/}; 这句是把%去掉?还是显示匹配的有%的行?最后重新赋值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询