두 명령을 파일 및 이메일 출력에 연결

두 명령을 파일 및 이메일 출력에 연결
#!/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생략할 수 있습니다 . 이는 하나의 프로세스를 제거하고 더 효율적입니다.grepawk

또한 임시 "제목" 변수를 제거하고 패턴 대체를 사용하여 IP 주소를 제거했습니다( *-아무것도 바꾸지 않음).

=Perl을 호출하면 상당한 오버헤드가 발생하므로 65자를 철자하겠습니다 . 이 스크립트를 실행하는 것만으로는 눈치 채지 못할 것이지만 습관으로 삼고 때로는 초당 여러 번 실행되는 이와 같은 스크립트를 작성하면~ 할 것이다차이점을 확인하세요.

관련 정보