2 votes

En bash, comment puis-je passer l'entrée des boucles while à la commande cut ?

Comment transmettre correctement la ligne $ à la commande cut dans cette boucle ?

while read line
do
    login= $(cut -d : -f 1)

done < /etc/passwd

Je ne peux pas faire $(cut -d : -f 1 $line) Alors, quelle est la bonne méthode ?

3voto

Abbas Points 3737

Laissez le read avec la commande Shell. IFS La variable parse la ligne pour vous :

while IFS=: read -r login restOfLine; do
    doSomethingWith $login
done < /etc/passwd

Pour répondre à votre question, le bash here-string serait utile :

login=$(cut -d: -f1 <<< "$line")

2voto

Dennis Points 46916

使用方法 echo :

login=$(echo "$line" | cut -d : -f 1)

1voto

Vous n'avez pas vraiment besoin de la boucle while si votre intention est seulement de lister les noms. Il y a également une erreur de syntaxe après login= il ne doit pas y avoir d'espace.

cut -d: -f1 /etc/passwd | \
while read login; 
do 
    echo username: $login;
done

ou comme vous avez essayé :

while read line; do
   login=$(echo $line | cut -d : -f 1)
   echo $login
done < /etc/passwd

encore mieux :

db-getent passwd |cut -d: -f1 | xargs -L1 echo name:

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X