En utilisant bash, j'essaie d'interroger /etc/passwd
tous les utilisateurs ayant un identifiant supérieur à 1000. S'ils existent, faites autre chose. Je suis perplexe. Toute aide est appréciée.
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
Réponses:
Essaye ça:
Le premier
grep
recherchepasswd
des lignes avec un uid de quatre chiffres ou plus. Le secondgrep
filtre la ligne avec l'ID 1000. Le statut de sortie sera 0 s'il reste des lignes, 1 sinon.la source
then
ligne, etc.-Evq
pour supprimer sa sortie.getent passwd
au lieu du/etc/passwd
fichier.Pour faire cela en
bash
boucle, je suggère d'utiliserread
et d'IFS
aimer:la source
Au lieu de lire
/etc/passwd
directement, vous devriez utilisergetent passwd
, cela fonctionnera également si certains de vos utilisateurs sont enregistrés dans quelque chose comme LDAP ou autre.awk
devrait être bien adapté au format de sortie séparé par deux-points.Cela afficherait les noms d'utilisateur de tous les utilisateurs avec UID> 1000:
Et cela ne ferait qu'imprimer
found
si au moins un tel est trouvé:la source
getent passwd | awk -F: '$3 >= 1000 && $3 < 2000 {print $1}'
>= 1000
il semblerait en effet logique. La question avait cependant> 1000
une raison.nobody
semble être communément6553x
ou3276x
, donc vous pouvez probablement augmenter un peu cette limite supérieure.Cette construction n'a pas beaucoup de sens:
La
id
commande fonctionne quelle que soit la redirection d'entrée. La redirection n'a aucun sens ici de toute façon.Vous pouvez utiliser ce pipeline dans votre comparaison de test. Il vous montrera l'ID utilisateur le plus élevé sur la machine:
Vous voudrez peut-être le modifier pour certains systèmes car il peut y avoir l'
nobody
utilisateur avec UID65534
présent.la source
En utilisant le code de Tom, cela a fonctionné pour moi ..
la source