Comment puis-je vérifier si des utilisateurs spécifiques sont connectés avec Unix?

J’essaye ça

#!/bin/sh until who | grep -E "$*" do sleep 60 done echo "$* logged in" 

mais cela ne fonctionne qu’avec un seul utilisateur écrit en arguments. J’ai besoin de ce programme shell pour travailler avec plusieurs utilisateurs écrits en arguments.

Itère sur $@ et vérifie la sortie de who pour chaque prénom:

 #!/bin/bash who="$(who)"; # Save the output of who for user in "$@"; do # Iterate over $@ if echo "$who" | grep -q "$user"; then # Check if $user is in $who echo "$user logged in"; fi; done; 

Qu’est-ce que tu essayais de faire avec cette boucle? Voulez-vous que le script attende qu’un utilisateur se connecte?

Le grep nécessite un certain travail, car il ne limite pas la correspondance au premier mot de chaque ligne. Vous pouvez également filtrer le résultat de who . Voici un script révisé:

 #!/bin/sh DONE=no while [ $DONE = no ] do who="$(who | sed -e 's/[[:space:]].*//' |sort -u)" for user in "$@" do for WHO in $who do if [ $WHO = $user ] then echo "$user logged in" DONE=yes break fi done done [ $DONE = no ] && sleep 60 done 

Comme vous pouvez le voir, le grep est inutile.

Finalement, changez-le en plain /bin/sh , car il n’ya pas besoin de shell spécifique dans cet exemple.