2017-05-06 5 views
1

Ich muss ein Bash-Skript schreiben, das überprüft, ob ein neuer Benutzer innerhalb von 5 Sekunden angemeldet ist, und wenn ja, drucken Sie die Details: Name, Benutzername, ...... Ich habe bereits den folgenden Code, der prüft Wenn sich ein neuer Benutzer angemeldet hat:Wie man Änderungen von zwei Variablen speichert?

originalusers=$(users) 
sleep 5 
newusers=$(users) 
if diff -u <(echo "$originalusers") <(echo "$newusers") 
then 
echo "Nothing's changed" 
exit 1 
else echo "New user is logged in" 
diff -u <(echo "$originalusers") <(echo "$newusers") >shell 

Antwort

0

Wenn ich die Frage richtig verstehe, möchten Sie den Unterschied zwischen zwei Bash-Variablen finden und den Unterschied in einer neuen Variable beibehalten. Eine Möglichkeit ist das Diff Ergebnis in eine Variable zu speichern:

diff_result=`diff -u <(echo "$originalusers") <(echo "$newusers")` 
echo -e "diff result:\n$diff_result" 

Wenn Sie jedoch diesen Code verwenden, werden Sie immer noch das diff Ergebnis analysieren müssen. Eine andere Möglichkeit ist die Verwendung des comm-Befehls:

originalusers_lines=`sed -e 's/ /\n/g' <(echo "$originalusers") | sort -u` 
newusers_lines=`sed -e 's/ /\n/g' <(echo "$newusers") | sort -u` 
comm_result=`comm -13 <(echo "$originalusers_lines") <(echo "$newusers_lines")` 
echo -e "new users:\n$comm_result" 

Die ersten beiden Zeilen erstellen sortierte eindeutige Listen von zeilengetrennten Benutzernamen. Der Befehl comm wird verwendet, um Benutzernamen zu finden, die nur in der neuen Benutzernamenliste angezeigt werden.

+0

Vielen Dank veryyyyy viel !!!!! Es funktioniert!!!!! : DDDDD –

0

Hier ist einer. Es ist ein Bash-Skript, das awk zum Zählen von Exits und Einträgen verwendet.

$ cat script.sh 
#!/bin/bash 
read -d '' awkscript <<EOF # awk script is stored to a variable 
BEGIN{ 
    split(now,n) 
    split(then,t) 
    for(i in n) 
     a[n[i]]++ 
    for(j in t) 
     a[t[j]]-- 
    for(i in a) 
     if(a[i]) 
      print i, (a[i]>0?"+":"") a[i] " sessions" 
} 
EOF 
while true     # loop forever 
do 
    sleep 1     # edit wait time to your liking 
    then="$now" 
    now="$(users)" 
    awk -v then="$then" -v now="$now" "$awkscript" 
done 

Run it:

$ bash script.sh 
james 14 sessions # initial amount of my xterms etc. 
james +1 sessions # opened one more xterm 
james -1 sessions # closed one xterm 

wirklich keinen Ort mit vielen Benutzern haben zu testen, kommen und gehen.

Verwandte Themen