|
|
|
|
Bonjour, je dois faire un script mais je bloque car visiblement je n'ai pas assimilé toutes les notions requises. Pouvez-vous m'aider à le résoudre et me donner des indications concernant les notions utilisées.
L'énoncé est le suivant :
Lancer les commandes suivantes:
env >> xx
env >> xx
env >> xx
env >> xx
env >> xx
Vous avez à présent un fichier nommé XX avec le contenu de env redirigé 5 fois à l'intérieur
Créer un script nommé 'username' qui prendra 1 argument qui sera le fichier créé précédemment (XX).
Parcourez ce fichier et recherchez les occurences de l'utilisateur qui a exécuté le script.
Lorsque vous avez trouvé une occurence de cet utilisateur, prenez la ligne et apposez-la dans un fichier en affichant un numéro de ligne et une parenthèse en début de ligne.
Le fichier créé ressemblera à ceci :
1) PWD=/home/belkacem.berbache
2) USER=belkacem.berbache
3) MAIL=/var/spool/mail/belkacem.berbache
4) LOGNAME=belkacem.berbache
5) HOME=/home/belkacem.berbache
6) PWD=/home/belkacem.berbache
7) USER=belkacem.berbache
8) MAIL=/var/spool/mail/belkacem.berbache
9) LOGNAME=belkacem.berbache
10) HOME=/home/belkacem.berbache
Nota!L'utilisation d'un fichier temporaire n'est pas permis.
Configuration: Windows XP Firefox 2.0.0.6
Salut,
root@debian:~/algorithme_en_c# env >> XX root@debian:~/algorithme_en_c# env >> XX root@debian:~/algorithme_en_c# env >> XX root@debian:~/algorithme_en_c# env >> XX root@debian:~/algorithme_en_c# env >> XX root@debian:~/algorithme_en_c# cat username #!/bin/bash i=1 for var in $(grep -E '^(PWD|USER|MAIL|LOGNAME|HOME)' $1) do echo "$i) $var" >> resultat i=$((i+1)) done root@debian:~/algorithme_en_c# sh username XX root@debian:~/algorithme_en_c# cat resultat 1) USER=lami20j 2) MAIL=/var/mail/lami20j 3) PWD=/home/lami20j/algorithme_en_c 4) HOME=/home/lami20j 5) LOGNAME=lami20j 6) USER=lami20j 7) MAIL=/var/mail/lami20j 8) PWD=/home/lami20j/algorithme_en_c 9) HOME=/home/lami20j 10) LOGNAME=lami20j 11) USER=lami20j 12) MAIL=/var/mail/lami20j 13) PWD=/home/lami20j/algorithme_en_c 14) HOME=/home/lami20j 15) LOGNAME=lami20j 16) USER=lami20j 17) MAIL=/var/mail/lami20j 18) PWD=/home/lami20j/algorithme_en_c 19) HOME=/home/lami20j 20) LOGNAME=lami20j 21) USER=lami20j 22) MAIL=/var/mail/lami20j 23) PWD=/home/lami20j/algorithme_en_c 24) HOME=/home/lami20j 25) LOGNAME=lami20jsi l'option -E n'existe pas pour ton grep mets '^\(PWD\|USER\|MAIL\|LOGNAME\|HOME\)'lami20j |
Salut,
$(commande) discutons maintenant la commande j'utilise l'option -E qui fait que grep se comporte comme egrep (grep étendu) pourquoi? pour ne pas obliger de mettre un antislash avant chaque paranthèse et | (en bref, histoire de paresse :-)) et aussi de compatibilité si le grep sur ton système n'a pas l'option -E (ça depends toujours de la version utilisée) on peut utiliser $(grep '^\(PWD\|USER\|MAIL\|LOGNAME\|HOME\)' $1) Pourquoi ^ ? ^ perment d'ancrer l'expression régulière au début de chaine Donc cherche les chaines qui commencent avec PWD ou USER ou ..... Je l'utilise puisque sinon je vais capturer aussi OLDPWD Comme ^ cherche au début de chaine, il ne va pas reconnaître OLDPWD même si PWD existe dans la chaîne lami20j |
Euh attends. Ya un truc qui m'échappe là.
#!/usr/bin/awk -f
BEGIN { "whoami" | getline ope }
$_ ~ ope { x++; print x ") " $_ >> "resultat" }
|
Rien ne t'empêche de changer $USER avec whoami ou d'utiliser des conditions, etc
#!/bin/bash i=1 for var in $(sed -n -e /$(whoami)/p $1) do echo "$i) $var" >> resultat i=$((i+1)) done et voilà ce que donne ton exemple chez moi (je ne me suis pas faire avoir encore avec cette variable :-)) debian:~# su lami20j lami20j@deb:/root$ whoami lami20j lami20j@deb:/root$ echo $USER lami20j lami20j@deb:/root$ whoami lami20j lami20j@deb:/root$ exit exit debian:~#-- lami20j P.S. Je m'arrête ici puisque mon but ce n'est pas de rendre ce programme portable :-D, j'ai d'autre projets que je veux rendre portable ;-))) Bonne soirée |