您好我是shell脚本的新手。 我的要求是: 有一台服务器& 3个客户。在每个客户端上生成错误日志文件,这些文件有4种类型。类型1错误,类型2错误,如此类型4错误。 我想写一个脚本,从服务器和放大器读取所有3个客户端。我提供了多次在每个客户端上生成4种不同类型的错误日志。 简而言之,它应该使用ssh& grep命令组合。 我已经编写了演示脚本,但它没有向我提供客户端上出现不同类型日志的次数。
#error[1]='Exception: An application error occurred during an address lookup request, please contact IT'
#error[2]='SocketTimeoutException: Read timed out'
#error[3]='Exception: The search has produced too many matches to be returned'
#error[4]='Exception: No matching address found'
error_1='exception 1'
error_2='exception 2'
function get_list_of_clients()
{
NUM_OF_CLIENTS=$(wc -l ${CLIENT_IP_LIST} | awk -F " " '{ print $1 }' )
echo $NUM_OF_CLIENTS
if [ "${NUM_OF_CLIENTS}" -gt 0 ]
then
for ((row=2; row<=$NUM_OF_CLIENTS; row++))
do
CLIENTS_IP=$(sed -n ${row}p ${CLIENT_IP_LIST}| awk -F " " '{print $3 }')
echo ${CLIENTS_IP}
# get_number_of_errors
# copy_count_errors
echo ${$error_$row}
done
fi
}
function get_number_of_errors()
{
for((row_no=1; row_no<=4; row_no++))
do
{
/usr/bin/expect - <<- EndMark
spawn ssh root@${CLIENTS_IP} "grep $error[$row_no] var/error.log |wc -l" >> /tmp/${CLIENTS_IP}_error${row_no}.txt
match_max 50000
expect {
"*yes/no*" {
send -- "yes\r"
send -- "\r"
exp_continue
}
"*?assword:*" {
send -- "${CLIENT_PASSWORD}\r"
send -- "\r"
}
}
expect eof
EndMark
}
done
}
function copy_count_errors()
{
/usr/bin/expect - <<- EndMark
spawn scp root@${CLIENTS_IP}:/tmp/${CLIENTS_IP}* /tmp/
match_max 50000
expect {
"*yes/no*" {
send -- "yes\r"
send -- "\r"
exp_continue
}
"*?assword:*" {
send -- "${CLIENT_PASSWORD}\r"
send -- "\r"
}
}
expect eof
EndMark
}
get_list_of_clients
=============================================== ================================= 请帮忙。
答案 0 :(得分:0)
这不是一个真正的答案,是一种帮助你获得自己的答案。
如果我理解正确的话:
$CLIENT_IP_LIST
的文件中,其中IP是第三个字段,第一行是某种标题,您要排除该标题。-C
标志进行压缩。get_list_of_clients()
功能尚未运行。话虽如此,这里是对get_list_of_clients
的重写,我对其进行了测试,并且在我对$CLIENT_IP_LIST
文件的假设中有效:
function get_list_of_clients() {
let row=1
while read line
do
if (( row > 1 ))
then
set $line # Breaks line into pieces
CLIENT_IP="$3"
echo "$CLIENT_IP"
fi
let row=row+1
done < $CLIENT_IP_LIST
}