| Qui est en ligne ? |
| Il y a : 9 utilisateurs en ligne, consultez le détail |
Forum » Serveur, Réseaux et Programmation » Incrémenter en bash |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
| Page : [1] |
| Auteur | Message |
|---|---|
|
|
#0 Message posté le : 27-03-2008 à 22:01:30 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 24-04-2006 Nombre de messages : 133 |
Bonjour à tous me revoici avec mon analyse de /etc/passwd Voici mon code : #!/bin/bash
for i in `cat passwd`
do
j="1"
echo "voici la" $j"e ligne : " $i
j=$j+"1" | bc
echo "fin de la boucle"
done
J'ai cherché sur le Net mais je n'ai rien trouvé de fonctionnel. Merci d'avance. ------------------------------------- Bienvenue dans le monde du libre |
|
|
#1 Message posté le : 28-03-2008 à 02:04:28 |
Maître Jedi Forum : Inscrit Association : Arrivé(e) le : 16-01-2003 Nombre de messages : 8931 |
Quelque chose comme :
#/bin/bash
nbre=`awk 'END {print NR}' /etc/passwd`
i=1
while (( $i < $nbre )); do
echo "Voici la ligne $i :"
head -$i /etc/passwd | tail -1
i=$(($i + 1))
done
echo "fin de la boucle"
La commande head avec la redirection sur tail à été trouvé sur le web. Il ya certainement mieux avec awk (ou gawk) ou grep (s'ils permettent d'afficher la nième ligne d'un fichier=. Enfin je te laisse chercher. --Message édité par tonton nestor le 28-03-2008 à 02:10:42-- |
|
|
#2 Message posté le : 28-03-2008 à 02:17:50 |
Maître Jedi Forum : Inscrit Association : Arrivé(e) le : 16-01-2003 Nombre de messages : 8931 |
ajout : le for i in `cat passwd` à l'inconvénient te considérer une espace comme un saut de ligne : sshd:x:22:22:added by portage for openssh:/var/empty:/sbin/nologin la variable i va prendre 5 valeurs successives à la place d'une seule. De plus sur ce que tu avais écris, regarde l'initialisation de ta variable j : elle est à l'intérieur de la boucle et non devant. --Message édité par tonton nestor le 28-03-2008 à 02:18:24-- |
|
|
#3 Message posté le : 28-03-2008 à 09:24:23 |
Hobbit Forum : Inscrit Association : Arrivé(e) le : 17-10-2003 Nombre de messages : 1062 |
cat -n /etc/passwd |awk '{print "voici la ligne",$0}'
------------------------------------- If you don't know, ask manpage ! |
|
|
#4 Message posté le : 28-03-2008 à 11:25:19 |
Maître Jedi Forum : Inscrit Association : Arrivé(e) le : 16-01-2003 Nombre de messages : 8931 |
Je me disais bien qu'il devait avoir plus simple |
|
|
#5 Message posté le : 28-03-2008 à 11:27:13 |
Elfe Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 3998 |
On peut aussi utiliser sed, ou $i contient le numéro de la ligne :cat /etc/passwd | sed "$i""q;d" Pour avoir le nombre de lignes : cat /etc/passwd | wc -l --Message édité par jblecanard le 28-03-2008 à 11:28:20-- ------------------------------------- C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon - |
|
|
#6 Message posté le : 28-03-2008 à 15:14:37 |
Hobbit Forum : Modérateur Association : Président Arrivé(e) le : 09-04-2006 Nombre de messages : 1999 |
Le Bash ne sert pas à implémenter des algorithmes mais à combiner d'autres programmes. En d'autres termes, si vous avez l'impression de faire des choses compliquées en Bash, vous pouvez vous dire que ça n'est pas bon... et c'est ce qui fait que le Bash est parfois rageant. Tamiel vous a donné une excellent solution. Ceci dit, Befa, pour faire du calcul bash, tu peux effectivement utiliser bc mais plutôt de cette manière :
j=`echo "$j + 1" | bc` ce qui est assez lourd pour une pauvre somme... expr et let, sont plus simples à utiliser :
let "j = j + 1" ou beaucoup plus simplement, tu peux passer en mode arithmétique pour faire ton calcul : j=`expr $j + 1`
((j++)) .Tonton Nestor > Pour éviter ce problème avec le for, il faut modifier la variable IFS (Internal Field Separator) :
IFS=$'\n'; for l in `cat /etc/passwd`; do echo "$l"; done .------------------------------------- Cherche distributeur manuel/automatique de câlins femelle pour mise en réseau rapprochée. Nota : je préfèrerais un modèle bien documenté. |
|
|
#7 Message posté le : 28-03-2008 à 16:22:27 |
Maître Jedi Forum : Inscrit Association : Arrivé(e) le : 16-01-2003 Nombre de messages : 8931 |
Intéressant, je vais essayer de le noter quelque part... |
| Page : [1] |
Forum » Serveur, Réseaux et Programmation » Incrémenter en bash |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
- Petit scarabée : 0 pastille, moins de 100 messages
- Scarabée : 0 pastille, plus de 100 messages
- Hobbit : 1 pastille, plus de 1000 messages
- Naboo : 2 pastilles, plus de 2000 messages
- Elfe : 3 pastilles, plus de 3000 messages
- Jedi : 4 pastilles, plus de 4000 messages
- Maître Jedi : 5 pastilles, plus de 5000 messages