#!/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
省略できます。これは1つのプロセスを排除し、より効率的です。grep
awk
また、一時的な「タイトル」変数を削除し、パターン置換を使用してIPアドレスを削除しました(*-
何も変更しません)。
=
Perlを呼び出すとかなりのオーバーヘッドが発生するので、65文字を綴ります。このスクリプトを実行するだけでは気付かないかもしれませんが、習慣として、時には毎秒数回実行されるようなスクリプトを書くと〜する違いを確認してください。