![두 명령을 파일 및 이메일 출력에 연결](https://linux55.com/image/75627/%EB%91%90%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%ED%8C%8C%EC%9D%BC%20%EB%B0%8F%20%EC%9D%B4%EB%A9%94%EC%9D%BC%20%EC%B6%9C%EB%A0%A5%EC%97%90%20%EC%97%B0%EA%B2%B0.png)
#!/bin/ksh
#HOSTS format:
HOSTS="xxxx.xxx.xxx.xx-ACCOUNT"
FILE=/home/angela/list.txt #list will be saved on list.txt
date > $FILE
echo >> $FILE
for host in $HOSTS; do
ip=$(echo $host|cut -d '-' -f 1)
title=$(echo $host|cut -d '-' -f 2)
lsuser -a login ALL | grep '=true$' | awk '{ print $1 }' >/tmp/delta 2>/dev/null
echo "$title instance" >> $FILE
perl -e 'print "=" x 65,"\n"' >>$FILE
#we filter through unwanteduser.list to remove unwanted users
cat /tmp/delta|grep -wvf /home/angela/unwanteduser.list|sort >> $FILE
echo >> $FILE
done
rm -f /tmp/delta
mailx -r [email protected] -s "List of active Users and Locked users" [email protected] < "$FILE"
추가하려고 해요lsuser -a login ALL | grep '=false$' | awk '{ print $1 }'
잠긴 계정 목록을 위 스크립트로 보내고 활성 사용자 및 잠긴 사용자 목록이 포함된 이메일을 보냅니다.
현재 스크립트는 나에게 이것을 제공합니다
Wed Oct 21 10:36:51 CDT 2015
Account instance
=================================================================
john
alex
raven
max
이걸 끝내고 싶어
Wed Oct 21 10:36:51 CDT 2015
list of Active users
Account instance
=================================================================
john
alex
raven
max
list of Locked users
Account instance
=================================================================
joe
tracy
karen
ben
지금까지는 활성 사용자만 나열할 수 있습니다. 아래 스크립트를 시도했는데 출력 없이 날짜만 얻었지만 달성하려는 형식에 맞지 않습니다.
#!/bin/ksh
(
date
echo
for host in $HOSTS; do
echo "${host/*-} instance"cat
perl -e 'print "=" x 65,"\n"'
lsuser -a login ALL | awk '/=true$/ { print $1 }' | grep -wvf /home/angela/unwanted.list
lsuser -a login ALL | awk '/=false$/ { print $1 }' | grep -wvf /home/angela/unwanted.list
echo
done
) | mailx -r [email protected] -s "List of active Users and Locked users" [email protected]
답변1
여러 다른 명령의 출력을 메시지로 함께 메일로 보내려면 임시 파일을 사용하지 말고 명령을 그룹화한 다음 파이프만 사용하십시오.
(
date
echo
for host in $HOSTS; do
echo "${host/*-} instance"
perl -e 'print "=" x 65,"\n"
lsuser -a login ALL | awk '/=true$/ { print $1 }' | grep -wvf /home/angela/unwanteduser.list
echo
done
) | mailx -r [email protected] -s "List of active Users and Locked users" [email protected]
(
..thing은 )
별도의 하위 쉘 프로세스에서 대괄호 사이의 명령을 실행하므로 모든 표준 출력을 함께 파이프할 수 있습니다.
필터링은 데이터가 생성될 때 수행되는 것이 아니라 데이터가 생성될 때 수행될 수 있습니다.
어쨌든 이를 사용하는 경우 자체적으로 처리할 행을 완벽하게 선택할 수 있으므로 파이프라인의 해당 부분을 awk
생략할 수 있습니다 . 이는 하나의 프로세스를 제거하고 더 효율적입니다.grep
awk
또한 임시 "제목" 변수를 제거하고 패턴 대체를 사용하여 IP 주소를 제거했습니다( *-
아무것도 바꾸지 않음).
=
Perl을 호출하면 상당한 오버헤드가 발생하므로 65자를 철자하겠습니다 . 이 스크립트를 실행하는 것만으로는 눈치 채지 못할 것이지만 습관으로 삼고 때로는 초당 여러 번 실행되는 이와 같은 스크립트를 작성하면~ 할 것이다차이점을 확인하세요.