Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1564 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs

  ptits pb de scripts sh .... sujet d'interro inside

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

ptits pb de scripts sh .... sujet d'interro inside

n°59101
404notfoun​d
Posté le 16-01-2002 à 21:58:44  profilanswer
 

bjr voilà , j'ai interro d'unix (c'est juste une initiation)
et le but du jeu c'est de faire qques scripts sous shell de bourne .
Bon jusqu'à présent , à peu près tous les scripts passent bien , mais j'arrive pas à utiliser la condition until sans que ça m...
Je m'explique :
par exemple :
while [ ! $choix = 0 ]
read choix  
... etc fin du script , ça ça marche sans problème
mais le même avec until :
until [ $choix = 0 ]
read choix  
.... etc fin du script , là , soit ça ne donne aucun résultat , soit j'ai un truc du genre "unary operator expected" ...
 
Où est le problème à votre avis ???
 
Deuxième Question , j'ai regardé le manuel de la commande grep , mais je ne sais pas comment faire pour trouver une chaine de caractère dans les fichiers d'un repertoire .
Explication -> si dans le repertoire /root j'ai un fichier texte qui contient le mot "guignol" , quelle commande me trouvera le mot "guignol" parmis les fichiers du répertoire ?
 
Merci d'avance :)))

mood
Publicité
Posté le 16-01-2002 à 21:58:44  profilanswer
 

n°59103
saudium
Posté le 16-01-2002 à 22:06:22  profilanswer
 

until test-commands; do consequent-commands; done
 
grep "toto*"  (ou une expression reguliere)  /root/*


---------------
root 66
n°59104
saudium
Posté le 16-01-2002 à 22:07:39  profilanswer
 

7.4 Until sample
         #!/bin/bash
         COUNTER=20
         until [  $COUNTER -lt 10 ]; do
             echo COUNTER $COUNTER
             let COUNTER-=1
         done


---------------
root 66
n°59105
404notfoun​d
Posté le 16-01-2002 à 22:11:01  profilanswer
 

Merci -> voilà exactement le truc :
 
Avec while , ça marche :
while [ ! $chou = "OK" ]
   echo "----------------------------------------------------------------"
  echo "choix OK fin"
  echo "choix 1 Date du jour"
  echo "choix 2 Liste des personnes connectées sur la machine"
  echo "choix 3 Liste des fichiers du repertoire courant"
  echo "choix 4 Nom du repertoire courant"
  echo "----------------------------------------------------------------"
  read chou
  #lit la valeur entrée par l'utilisateur
   do
   case $chou in
    OK) exit ;;
    1) date ;;
    2) who ;;    
    3) ls -al ;;
    4) pwd ;;
  esac
 done
Mais avec Until ça foire ... et ça c'est qu'un exemple , j'ai fait une dizaine de scripts dans le genre qui marchent avec while , mais plus avec until cad la condition inverse ....
 
until [ $chou = "OK" ]
   echo "----------------------------------------------------------------"
  echo "choix OK fin"
  echo "choix 1 Date du jour"
  echo "choix 2 Liste des personnes connectées sur la machine"
  echo "choix 3 Liste des fichiers du repertoire courant"
  echo "choix 4 Nom du repertoire courant"
  echo "----------------------------------------------------------------"
  read chou
  #lit la valeur entrée par l'utilisateur
   do
   case $chou in
    OK) exit ;;
    1) date ;;
    2) who ;;    
    3) ls -al ;;
    4) pwd ;;
  esac
 done
 
 
Jvais essayer Merci

n°59107
404notfoun​d
Posté le 16-01-2002 à 22:12:55  profilanswer
 

si j'ai bien compris , pour le until , c'est du "test" que venait l'erreur ??

n°59111
saudium
Posté le 16-01-2002 à 22:24:03  profilanswer
 

bonne question , until est particulierement penible chez moi aussi .  reste sur while .


---------------
root 66
n°59112
saudium
Posté le 16-01-2002 à 22:24:53  profilanswer
 

et j'ai des differences de comportements entre bash et zsh aussi ...


---------------
root 66
n°59114
404notfoun​d
Posté le 16-01-2002 à 22:29:50  profilanswer
 

merci , c'est bien ce qu'il me semblait pour le "until" .... c'est pas génial ...pour les ptits pb entre les différents shells , certains scripts ne fonctionnent tout simplement pas d'un shell à l'autre .
 
Pour le grep , en fait , c'est l'étoile qui cherche dans tous les paramètres , si j'ai bien compris ? j'aurais dû y penser !!! Merci beaucoup !!!

n°59159
pipomolo
faisez gaffe aux pigeons
Posté le 17-01-2002 à 10:21:24  profilanswer
 

Le probleme peut venir de l'initialisation d'une variable
 
Qd tu fais un test sur une variable non initialisee, tu as une erreur d'execution
 
Je ne sais pas si ton probleme vient de la, mais perso je mets toujours mes variables entre double quotes dans mes tests
 
du genre :
 
until [ "${machin}" = "OK" ]
    do
    mes_commandes
    done
 
Par contre je ne comprends pas dans ton script pourquoi tu mets des trucs entre le until et le do ??
Pourquoi tu ne les mets pas
- soit avant le until
- soit apres le do
mais entre les deux je ne vois vraiment pas
 
++

n°59164
404notfoun​d
Posté le 17-01-2002 à 11:10:04  profilanswer
 

Bijour , voilà ce script qui ne marche pas très bien , je voudrait qu'il s'execute sous la forme : nom_du_script  nom_du_répertoire_enparamètre
et qu'en plus de tout ce qu'il est censé faire il vérifie à chaque fois si le répertoire en paramètre existe ...j'ai essayé avec le "test -d" , mais ça marche pas ...
 
Le script :
 
cd $a
until [ $choix = "Q" ]
      for a in `ls -al`
 do
  if test -d $a
  then
   echo $a
  fi
 
 echo "-------------------------------------------------------------------"
 echo "Afficher les attributs du repertoire"
 echo "Lister les fichiers du répertoire"
 echo "Créer un répertoire"
 echo "Supprimer un répertoire"
 echo "Rechercher une chaine de caractèe parmi les fichiers du repertoire"
 echo "Quitter"
 echo "-------------------------------------------------------------------"
 echo "Votre Choix ?"
 echo "-------------------------------------------------------------------"
 read choix
  case $choix in
   A) echo "Voici les droits d'accès du répertoire :"
      ls -ld $a ;;
                 L) echo "Voici la liste des fichiers du répertoire :"
      ls -al $a;;
   C) echo "Entrez un nom de répertoire"
           read reper
      mkdir $reper > $a ;;
      #crée le repertoire dans le repertoire passé en paramètre au début
   S) echo "Suppimer un repertoire "
       "Quel repertoire voulez-vous supprimer ?"
    read repertoire
      rmdir $repertoire ;;
   R) echo " Recherche d'une chaine de caractère parmi les fichiers du répertoire"
      echo " Quelle chaine de caractère voulez-vous chercher ?"
       read chainecarac
      grep  $chainecarac ;;
   Q) echo "Bye Bye"  
    exit ;;
  esac
 
 
 
 
 
 done
 
J'ai aussi fait un script qui doit chercher le GID du groupe ou d'un utilisateur entré en pramaètre dans le fichier /etc/passwd , mais ça marche pas non plus ...
 
Le script :
 
if test -z variable

mood
Publicité
Posté le 17-01-2002 à 11:10:04  profilanswer
 

n°59165
404notfoun​d
Posté le 17-01-2002 à 11:10:56  profilanswer
 

je continue :
if test -z variable
then exit
else
grep $variable /etc/group
elif

n°59183
saudium
Posté le 17-01-2002 à 11:57:15  profilanswer
 

[ $# -lt 1 ] && { echo "usage : $0 <repertoire>"; exit; }
 
for i in `ls $1/*`;do [ -d $i ] && echo $i; done

 

[edtdd]--Message édité par saudium--[/edtdd]


---------------
root 66
n°59186
saudium
Posté le 17-01-2002 à 11:59:09  profilanswer
 

pour la recherche du gid d'un groupe passé en parametre
 
grep $1 /etc/group && cut -f3 -d:

 

[edtdd]--Message édité par saudium--[/edtdd]


---------------
root 66
n°59188
404notfoun​d
Posté le 17-01-2002 à 12:00:40  profilanswer
 

Je vais tester ça , si ça marche , un Grand grand merci !!!!

n°59189
saudium
Posté le 17-01-2002 à 12:01:57  profilanswer
 

j'ai edité mes posts et tout fonctionne ;)  
 
...ou presque :( , je viens de m'apercevoir d'un truc  ...  
 
reprend ta methode ou tu te deplaces dans $1  
 
cd $1  
 
et pis un for i in `ls`  tout court cette fois .  
 
sinon il aime pas le ls $1

 

[edtdd]--Message édité par saudium--[/edtdd]


---------------
root 66
n°59191
404notfoun​d
Posté le 17-01-2002 à 12:05:30  profilanswer
 

La c'est comme ça , y'a plus rien à toucher normalement ??
(message edité)
 
 
cd $1
until [ $choix = "Q" ]
      [ $# -lt 1 ] && { echo "usage : $0 <repertoire>"; exit; }
 
 for i in `ls`;do [ -d $i ] && echo $i; done  
 
 echo "-------------------------------------------------------------------"
 echo "Afficher les attributs du repertoire"
 echo "Lister les fichiers du répertoire"
 echo "Créer un répertoire"
 echo "Supprimer un répertoire"
 echo "Rechercher une chaine de caractèe parmi les fichiers du repertoire"
 echo "Quitter"
 echo "-------------------------------------------------------------------"
 echo "Votre Choix ?"
 echo "-------------------------------------------------------------------"
 read choix
  case $choix in
   A) echo "Voici les droits d'accès du répertoire :"
      ls -ld $1 ;;
                 L) echo "Voici la liste des fichiers du répertoire :"
      ls -al $1;;
   C) echo "Entrez un nom de répertoire"
           read reper
      mkdir $reper > $1 ;;
      #crée le repertoire dans le repertoire passé en paramètre au début
   S) echo "Suppimer un repertoire "
       "Quel repertoire voulez-vous supprimer ?"
    read repertoire
      rmdir $repertoire ;;
   R) echo " Recherche d'une chaine de caractère parmi les fichiers du répertoire"
      echo " Quelle chaine de caractère voulez-vous chercher ?"
       read chainecarac
      grep  $chainecarac ;;
   Q) echo "Bye Bye"  
    exit ;;
  esac
 
 
 
 
 
 done

 

[edtdd]--Message édité par 404notfound--[/edtdd]

n°59192
saudium
Posté le 17-01-2002 à 12:09:01  profilanswer
 

le test [ $# ... c'est pour tester s'il y a bien un parametre , donc à mettre au tout debut du script !  
 
ensuite il faut pas un do apres le until ?  
 
et pis ca devrait tourner ? ;)


---------------
root 66
n°59194
404notfoun​d
Posté le 17-01-2002 à 12:11:46  profilanswer
 

Le truc , c'est que je dois envoyer ce script par mail à mon prof , c'est mon sujet d'interro , tu crois que c'est bon ??
Pour le second script , le test -z est faux ??? parce qu'en fait j'aimerais bien tester si le paramètre existe lorsqu'il fait  une recherche .
merci

n°59195
saudium
Posté le 17-01-2002 à 12:12:24  profilanswer
 

#!/bin/sh
 
[ $# ..tralala ]
 
cd $1
for in `ls` ....  
until
do
 ....
done


---------------
root 66
n°59196
404notfoun​d
Posté le 17-01-2002 à 12:14:38  profilanswer
 

Et là , c'est mieux ???
:D
 
#!/bin/sh
[ $# -lt $1 ] && { echo "usage : $0 <repertoire>"; exit; }
cd $1
for i in `ls $1/*`;do [ -d $i ] && echo $i; done  
until [ $choix = "Q" ]
do
       
 
 
 
 echo "-------------------------------------------------------------------"
 echo "Afficher les attributs du repertoire"
 echo "Lister les fichiers du répertoire"
 echo "Créer un répertoire"
 echo "Supprimer un répertoire"
 echo "Rechercher une chaine de caractèe parmi les fichiers du repertoire"
 echo "Quitter"
 echo "-------------------------------------------------------------------"
 echo "Votre Choix ?"
 echo "-------------------------------------------------------------------"
 read choix
  case $choix in
   A) echo "Voici les droits d'accès du répertoire :"
      ls -ld $1 ;;
                 L) echo "Voici la liste des fichiers du répertoire :"
      ls -al $1;;
   C) echo "Entrez un nom de répertoire"
           read reper
      mkdir $reper > $1 ;;
      #crée le repertoire dans le repertoire passé en paramètre au début
   S) echo "Suppimer un repertoire "
       "Quel repertoire voulez-vous supprimer ?"
    read repertoire
      rmdir $repertoire ;;
   R) echo " Recherche d'une chaine de caractère parmi les fichiers du répertoire"
      echo " Quelle chaine de caractère voulez-vous chercher ?"
       read chainecarac
      grep  $chainecarac ;;
   Q) echo "Bye Bye"  
    exit ;;
  esac
 
 
 
 
 
 done

n°59197
saudium
Posté le 17-01-2002 à 12:14:55  profilanswer
 

si un parametre existe ?  et en testant simplement s'il y a au moins un parametre plutot que "l existence" d'un parametre ?  
 
$# contient le nombre de parametres +1 (le nom du script est pris en compte et on peut le recuperer par $0 , le 1er parametre est $1 et ainsi de suite ...)


---------------
root 66
n°59199
saudium
Posté le 17-01-2002 à 12:15:59  profilanswer
 

for i in `ls`   (on oublie le $1 , ca chie un peu sinon )
 
t'as rien pour tester sous la main ? :D


---------------
root 66
n°59200
saudium
Posté le 17-01-2002 à 12:17:17  profilanswer
 

ch'uis fatigué moâ , c'est [ $# -lt 1 ] , 'scuse moi :D


---------------
root 66
n°59201
404notfoun​d
Posté le 17-01-2002 à 12:17:30  profilanswer
 

Pour le sujet exact :
ecrire un script qui récupère le GID du de l'ensemble des usagers du groupe donné en paramètre dans le fichier /etc/passwd
vous vérifierez la présence du paramètre  ...

n°59202
saudium
Posté le 17-01-2002 à 12:18:24  profilanswer
 

allez promis c'te fois , je te ferais un script qui marche  testé , approuvé , estampillé label rouge :p


---------------
root 66
n°59203
404notfoun​d
Posté le 17-01-2002 à 12:18:40  profilanswer
 

Pour tester , fô que je reboote , et y'a pas de drivers pour mon modem numéris usb sous linux ... en plus jsuis sous aol , donc mission quasi impossible ....

n°59204
saudium
Posté le 17-01-2002 à 12:25:56  profilanswer
 

404notfound a écrit a écrit :

Pour le sujet exact :
ecrire un script qui récupère le GID du de l'ensemble des usagers du groupe donné en paramètre dans le fichier /etc/passwd
vous vérifierez la présence du paramètre  ...  




 
attend , j'ai deja du mal à decrypter le probleme : y veut quoi ? passer un parametre id de groupe au script et recuperer le GID des users ? :p ..   c'est pas plutot l'UID ?


---------------
root 66
n°59206
404notfoun​d
Posté le 17-01-2002 à 12:29:47  profilanswer
 

Yes , en fait , par exemple  
tu tapes : script_recherche  nom_dugroupe
et ce script va afficher toutes les utilisateur du groupe passé en paramrètre .
Si ce groupe n'existe pas (cad s'il ne trouve pas la chaine de caractère passée en paramètre dans /etc/passwd ) , fin du script .
 
Pour le script précédent , ça a l'air bon , non je l'envoie ?

n°59207
404notfoun​d
Posté le 17-01-2002 à 12:30:46  profilanswer
 

Un grand merci encore une fois d'avance !!!
Le premier script est noté sur 14 , ça fait mal ...

n°59208
saudium
Posté le 17-01-2002 à 12:37:23  profilanswer
 

attend , pas de panique : la recherche des users sur un gid donné en une ligne :D  (et testé ! )
 
[ $# -lt 1 ] && { echo "usage: $0 <gid>";exit; } || { grep $1 /etc/passwd | cut -f1 -d: ; }


---------------
root 66
n°59210
saudium
Posté le 17-01-2002 à 12:39:32  profilanswer
 

404notfound a écrit a écrit :

Et là , c'est mieux ???  
:D  
 
#!/bin/sh  
[ $# -lt $1 ] && { echo "usage : $0 <repertoire>"; exit; }  
cd $1  
for i in `ls $1/*`;do [ -d $i ] && echo $i; done  
until [ $choix = "Q" ]  
do  
       .....




 
for i in `ls` ;do [ -d $i ] && echo $i; done  
 
et tu fais gaffe , les ` (backquote) c'est pas des '(apostrophe) ;)


---------------
root 66
n°59211
404notfoun​d
Posté le 17-01-2002 à 12:40:37  profilanswer
 

Merci  :eek2: , je vais tout envoyer je crois , mais j'ai peur que ça se voie , je ne suis pas encore capable de faire des trucs comme ça (même si c'est dans le cours  :D )
 
A ton avis c'est bon comme ça si j'envoie la dernière version du gros script et le petit script de recheche de GID ?
 
Merci

n°59213
saudium
Posté le 17-01-2002 à 12:41:39  profilanswer
 

mais ya un cas particulier sur lequel il faut mettre plus de ligne quand meme ;)


---------------
root 66
n°59214
404notfoun​d
Posté le 17-01-2002 à 12:42:28  profilanswer
 

euh ??? c'est koi ce cas particulier ???

n°59215
saudium
Posté le 17-01-2002 à 12:46:17  profilanswer
 

toto:x:17:15  
titi:x:89:151
 
 
on recherche le groupe 15 .  
 
le grep va te retourner egalement le 151 .  il faut donc tester .


---------------
root 66
n°59216
saudium
Posté le 17-01-2002 à 12:49:45  profilanswer
 

et pis verifier qu'on a pas 'greper' l'uid au lieu du gid ... :D


---------------
root 66
n°59217
404notfoun​d
Posté le 17-01-2002 à 12:50:06  profilanswer
 

A oui , ok i understand ... bon c'est pas grave , j'ai déjà envoyé le mail .... avec presque deux heures de retard ... tant pis .
Je pense que j'aurais la moyenne quand même ...
en grande partie grace à toi !!
 
Merci beaucoup !!!
Ce qui est dingue , c'est que c'est toujours facile quand on lit le cours , mais dès qu'on est sur un ordi à deux francs de la fac .... bein ça merde ...

n°59220
saudium
Posté le 17-01-2002 à 12:53:28  profilanswer
 

#!/bin/sh
 
[ $# -lt 1 ] && { echo "usage : $0 <groupe>"; exit; }
 
lst=`grep $1 /etc/passwd`
 
for i in $lst
do
   gid=`echo $i | cut -f4 -d:`
   [ "$gid" = "$1" ] && { echo $i | cut -f1 -d: ;}
done


---------------
root 66
n°59221
saudium
Posté le 17-01-2002 à 12:54:38  profilanswer
 

t'as deja envoyé le mail ?  raaaahhh  
 
je viens de me prendre la tete pour que ca marche :D


---------------
root 66
n°59222
404notfoun​d
Posté le 17-01-2002 à 12:56:53  profilanswer
 

il me semble que j'aurais du attendre deux minutes avant d'envoyer le mail  :cry:  
... dis-moi , si t'es aussi fort , c'est par plaisir ou tu bosses là-dedans ??

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs

  ptits pb de scripts sh .... sujet d'interro inside

 

Sujets relatifs
[Debian Newbie inside] - Tasks pour installer XFree et Gnome?N'a jamais personne qui parle de QNX ... [Bide Inside]
[NB inside] tjs avec PengAOLDebian et scripts utilisateur.
[newbie inside]comment mettre a jour mon kernel...j'en ai marre : Slack inside
2.4.15 vers 2.4.16 ca plante quand je compile (message erreur inside)attention hyper newbie inside ==> adsl sous linux
SUJET NON TROUVES : DHCP et DNS dynamic.RH 7.2 et kernel panic [100 ko JPG inside]
Plus de sujets relatifs à : ptits pb de scripts sh .... sujet d'interro inside


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR