#1 Le 11/04/2017, à 15: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
merci à tous
Dernière modification par goodCookies (Le 13/04/2017, à 17:04)
Hors ligne
#2 Le 11/04/2017, à 16: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, à 17:44)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 11/04/2017, à 17: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
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, à 18:36)
Hors ligne
#4 Le 12/04/2017, à 07: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, à 16: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...
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
Merci à tous
Dernière modification par goodCookies (Le 12/04/2017, à 16:49)
Hors ligne
#6 Le 12/04/2017, à 17: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, à 17:13
- goodCookies
Re : Aide pour la compréhension d'une structure conditionnelle [réglé]
je parlais de mes conditions if else
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, à 17:17)
Hors ligne
#8 Le 12/04/2017, à 17: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, à 17: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
Dernière modification par goodCookies (Le 12/04/2017, à 17:28)
Hors ligne
#10 Le 12/04/2017, à 17: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, à 17: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, à 17:41)
Hors ligne