Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/04/2017, à 16:35

goodCookies

Aide pour la compréhension d'une structure conditionnelle [réglé]

Bonjour,

Ayant réalisé un petit script pour comprendre les bases du bash,Je bloque sur des choses assez bêtes et simple d'apparence !
En effet je souhaiterais faire une interface d'utilisation par le biais de questions/réponses, mais au bout de 2 ajouts dans mes tableaux, je sors du script, je ne vois pas le soucis.

J'aimerais faire des ajouts autant que je le souhaite et sortir de ma condition (questions/réponses) quand je le souhaite.

voici mon script:

#! /bin/bash
# script.sh

declare -a users=()
declare -a groups=()

read -p "Ajouter un utilisateur et son groupe associé [1]" response

main()
{
        read -p "Entrer un nom d'utilisateur : " username
        users[${#users[@]}]+=$username
        read -p "Entrer un nom de groupe pour cette utilisateur : " groupname
        groups[${#groups[@]}]+=$groupname
        echo ${users[@]}
        echo ${groups[@]}
}

main

read -p "Ajouter des autres utilisateurs [1]" response

if [ $response = 1 ]
then
   main;
fi

vous l'aurez compris le but étant d'automatiser l'ajout de user et de leur groupe associés, sans aucune (pour le moment) ligne de commande réelle wink

merci à tous

Dernière modification par goodCookies (Le 13/04/2017, à 18:04)

Hors ligne

#2 Le 11/04/2017, à 17:17

Watael

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

salut,

tu peux utiliser une boucle infinie :

while true
do
    read -p 'ajouter des utilisateurs [yn] : ' rep
    test "$rep" = y || break
    read -p 'nom... : ' nom
# ...
done

la fonction perd son utilité.

Dernière modification par Watael (Le 11/04/2017, à 18:44)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 11/04/2017, à 18:41

goodCookies

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

Salut Watael,

Beaucoup plus compacte ton code, tant mieux.
Mais alors si le choix est autre que Yes, le while ne le détecte pas, ou si je veux sortir du while et y revenir plus tard dans le code, là, une fonction est utile non ?

merci pour ton aide !
je teste,


Edit:
ton code fonctionne et je te remercie encore pour ton aide, mais en fait je me rends compte que mon souci provient de ma compréhension/construction de mes tableaux.
Si une bonne âme peut m'expliquer smile

voici ce que j'ai refait, via notamment des clés/valeurs, bien plus utile dans mon cas.

#!/bin/bash
declare -A users_groups
view_users_groups()
{
  for item in ${!users_groups[@]} ; do
          echo "nom \"${item}\" : groupe : "${users_groups[${elem}]};
  done
}

echo "Ajouter des utilisateurs [1] Voir les utilisateurs et leur groupes [2]"
read response

if [ $response = 1 ]
then
    read -p "Nom de l'utilisateur : " username
    read -p "Nom du groupe à associé à $username: " groupname
    users_groups[$username] = $groupname

elif [ $response = 2 ]
then
        view_users_groups
else
        echo "Commande non valide !"
fi

le code se déroule bien, j'ajoute un user, puis son groupe et ensuite cette erreur apparaît à la "compilation"
ligne 17: users_groups[toto] : commande introuvable

Dernière modification par goodCookies (Le 11/04/2017, à 19:36)

Hors ligne

#4 Le 12/04/2017, à 08:47

credenhill

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

hello
éliminer les espaces autour de =

users_groups[$username]=$groupname

Hors ligne

#5 Le 12/04/2017, à 17:44

goodCookies

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

salut credenhill


si je retire le "=" j'ai une erreur de compilation et surtout tout marchais bien pour cette partie, si je fais un "echo" de mon tableau (en le bouclant , voir code) tout roule... wink

mon principal souci est bien mes conditions, je souhaite en effet pouvoir enregistrer (dans mon tableau hashable/associatif) autant d'utilisateurs avec leurs groupes associés que je veux, puis quand j'ai fini, pouvoir sortir de la boucle de création, pour par exemple les afficher ou tout simple (comme je l'ai fait plus bas via une méthode) revenir au "sommaire"

#!/bin/bash
declare -A users_groups

view_users_groups()
{
  for item in ${!users_groups[@]}
  do echo "L'utilisateur: $item appartient au groupe: ${users_groups[$item]}"
  done
}

main()
{
 read -p "Ajouter des utilisateurs [1] Voir les utilisateurs et leur groupes [2]" response
}

main

if [ $response = 1 ] ; then
    read -p "Nom de l'utilisateur : " username
    read -p "Nom du groupe à associé à $username: " groupname
    users_groups[$username]=$groupname
    main
elif [ $response = 2 ] ; then
  view_users_groups
else 
  echo "Commande invalide !"
fi

Il y a une coquille dans ma boucle, car je ne peux pas ajouter plus de 1 ou 2 users/groupes et je suis "éjecter" et je suis renvoyé au prompt...Pour une meilleure compréhension et éviter tout quiproquo je vous invite à tester ce petit bout de code dans une console, vous verrez mieux  smile

Merci à tous

Dernière modification par goodCookies (Le 12/04/2017, à 17:49)

Hors ligne

#6 Le 12/04/2017, à 18:12

Watael

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

quelle boucle ?
il n'y a pas de boucle dans ton code, sauf pour lire le tableau.

if est une structure conditionnelle, mais ce n'est pas une boucle.

$ until test "$rep" = "n"; do echo "boucle n° $((++n))"; read -p 'rep : ' rep; done
boucle n° 1
rep : poi
boucle n° 2
rep : mlk
boucle n° 3
rep : n
$

on est sorti de la boucle.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 12/04/2017, à 18:13

goodCookies

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

je parlais de mes conditions if else wink

concernant ton code je ne vois pas trop le fonctionnement.

quoi que je tape (poi, mlk) ça boucle... et si je 'sort' via une autre saisie, là j'ai des erreurs...

Dernière modification par goodCookies (Le 12/04/2017, à 18:17)

Hors ligne

#8 Le 12/04/2017, à 18:15

Watael

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

if...then...else...fi n'est toujours exécuté qu'une seule fois.

pour boucler sur un test, voir mon message précédent.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 12/04/2017, à 18:25

goodCookies

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

dsl, mais je ne comprends pas trop comment intégrer mon test, donc les if imbriqués dans ton bout de code ?
je voyais pas ça si complexe, surtout avec le fait que tu me dises que le if ne s’exécute qu'une fois ...
Sauf erreur de compréhension de ma part, ton code s’exécute à l'infinie. J'aimerais juste un compromis entre le mien et le tiens smile

Dernière modification par goodCookies (Le 12/04/2017, à 18:28)

Hors ligne

#10 Le 12/04/2017, à 18:32

Watael

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

ah, mais tu veux faire un select !

$ select action in ajouter afficher; do case $action in ajouter) echo ajout;; afficher) echo liste;; *) break;; esac; done
1) ajouter
2) afficher
#? 1
ajout
#? 1
ajout
#? 2
liste
#? poipoi
$

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 12/04/2017, à 18:37

goodCookies

Re : Aide pour la compréhension d'une structure conditionnelle [réglé]

Vouiii !

désolé je me suis mal exprimé ...
mais l'idée est là, je cours tester merci Watael !

Dernière modification par goodCookies (Le 12/04/2017, à 18:41)

Hors ligne