#1 Le 25/09/2015, à 11:33
- Boombastick
Erreur de boucle avec while
Salut les basheux !
Je débute sur bash et m'exerce sur les boucles. Je voulais faire un script qui demande à l'utilisateur le nom de l’hébergeur, et tant que celui ci ne répond pas Online, online ou 1, le script repose la question. J'ai beau me relire je ne trouve pas mon erreur.
#!/bin/bash
while [ $DCSRV != Online ] || [ $DCSRV != online ] || [ $DCSRV != 1 ]; do
echo -e "Quel est l'hebergeur du serveur ?
1. Online
2. OVH
3. Autre"
read DCSRV
done
echo -e "Let's do this !"
Hors ligne
#2 Le 25/09/2015, à 11:43
- pingouinux
Re : Erreur de boucle avec while
Bonjour,
En utilisant la même structure que toi
while [ "$DCSRV" != Online ] && [ "$DCSRV" != online ] && [ "$DCSRV" != 1 ]; do
echo -e "Quel est l'hebergeur du serveur ?
1. Online
2. OVH
3. Autre"
read DCSRV
done
echo -e "Let's do this !"
Les conditions doivent être vérifiées simultanément. Mettre également des " " pour éviter une erreur lorsque DCSRV n'est pas initialisée.
Hors ligne
#3 Le 25/09/2015, à 11:47
- Boombastick
Re : Erreur de boucle avec while
Merci dude ! Une fois de plus ^^
Hors ligne
#4 Le 25/09/2015, à 16:09
- Boombastick
Re : Erreur de boucle avec while
J'ai fais mes boucles mais par contre et là je ne comprend absolument pas, il m'en saute une. C'est la première boucle qui gère les mots de passe et c'est comme si elle n'étais pas dans le script :
#!/bin/bash
# Script de configuration et de sécurisation des serveurs Debian 7 & 8
# Ecrit et moulé à la louche par XXXXXXXX pour la société XXXXXXXXXXX
# Inspiré du tuto de mespotesgeek.fr et du script rutorrent-bonobox d'exrat https://github.com/exrat/rutorrent-bonobox
# Installation :
# chmod +x script.sh
# ./script.sh
# Enjoy !
# includes
INCLUDES="includes"
. "$INCLUDES"/variables.sh
# Début du script
clear
. "$INCLUDES"/logo.sh
read -n1 -r -p "Appuis sur [Entrée] pour lancer le script" key
#Vérification de la compatibilité
VERSION=$(cat /etc/debian_version)
if [[ $VERSION =~ 7. ]]; then
DISV="wheezy"
elif [[ $VERSION =~ 8. ]]; then
DISV="jessie"
else
clear
echo -e "${CRED}Ta version de Debian n'est pas prise en charge !${CEND}"
read -n1 -r -p "Appuis sur [Entrée] pour quitter le script" key
exit 4
fi
while [ "$ROOTP1" != "$ROOTP2" ]; do
echo -e "${CGREEN}Nouveau mot de passe root :${CEND}"
read ROOTP1
echo -e "${CGREEN}Vérification du mot de passe :${CEND}"
read ROOTP2
if [ "$ROOTP1" != "$ROOTP2" ]; then
echo -e "${CRED}Les mots de passe ne correspondent pas !${CEND}"
fi
done
# Renseignements sur le serveurs
echo -e "${CGREEN}Quel est l'IP WAN du serveur ? ${CEND}"
read IPSRV
while [ "$DCSRV" != 1 ] && [ "$DCSRV" != 2 ] && [ "$DCSRV" != 3 ]; do
echo -e "${CGREEN}Quel est l'hebergeur du serveur ?
1. Online
2. OVH
3. Autre${CEND}"
read DCSRV
if [ "$DCSRV" != 1 ] && [ "$DCSRV" != 2 ] && [ "$DCSRV" != 3 ]; then
echo -e "${CRED}Tape 1, 2 ou 3.${CEND}"
fi
done
# Configuration des dépots
rm /etc/apt/sources.list
if [[ $DCSRV = Online ]] || [[ $DCSRV = online ]] || [[ $DCSRV = 1 ]]; then
echo "# Dépot Online
deb http://ftp.proxad.net/mirrors/ftp.debian.org $DISV main non-free contrib
deb-src http://ftp.proxad.net/mirrors/ftp.debian.org $DISV main non-free contrib
# Dépot des MAJ d'Online
deb http://ftp.proxad.net/mirrors/ftp.debian.org $DISV-updates main contrib non-free
deb-src http://ftp.proxad.net/mirrors/ftp.debian.org $DISV-updates main contrib non-free" >> /etc/apt/sources.list
elif [[ $DCSRV = OVH ]] || [[ $DCSRV = ovh ]] || [[ $DCSRV = 2 ]]; then
echo "# Dépot OVH
deb http://mirror.ovh.net/debian/ $DISV main contrib
deb-src http://mirror.ovh.net/debian/ $DISV main contrib" >> /etc/apt/sources.list
elif [[ $DCSRV = Autre ]] || [[ $DCSRV = autre ]] || [[ $DCSRV = 3 ]]; then
echo "# J'espère que t'as de la BP !" >> /etc/apt/sources.list
fi
echo "# Dépot français de Debian
deb http://ftp.fr.debian.org/debian/ $DISV main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ $DISV main contrib non-free
# Dépot de Dotdeb pour des MAJ toutes belles toutes propres ! :)
deb http://packages.dotdeb.org $DISV all
deb-src http://packages.dotdeb.org $DISV all" >> /etc/apt/sources.list
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
apt-get update && apt-get upgrade -y
apt-get install openssh-sftp-server
# Configuration des users et mot de passe
Dernière modification par Boombastick (Le 25/09/2015, à 16:09)
Hors ligne
#5 Le 25/09/2015, à 16:56
- erresse
Re : Erreur de boucle avec while
Si tu n'as pas initialisé ROOTP1 et ROOTP2 avant l'entrée dans la boucle, ils sont tous deux vides et donc, l'égalité est détectée et la boucle ne s'exécute pas.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#6 Le 25/09/2015, à 17:39
- Boombastick
Re : Erreur de boucle avec while
Si tu n'as pas initialisé ROOTP1 et ROOTP2 avant l'entrée dans la boucle, ils sont tous deux vides et donc, l'égalité est détectée et la boucle ne s'exécute pas.
Oui mais pourtant ma seconde boucle marche niquel
Hors ligne
#7 Le 25/09/2015, à 17:57
- erresse
Re : Erreur de boucle avec while
Ce n'est pas comparable, la seconde boucle teste des valeurs littérales définies, la première fois où on teste la condition, DCSRV n'est égal ni à 1 ni à 2 ni à 3, donc on exécute la boucle.
Ce n'est pas le cas pour la première boucle.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#8 Le 25/09/2015, à 17:59
- pingouinux
Re : Erreur de boucle avec while
Oui mais pourtant ma seconde boucle marche niquel
Oui, parce que tu entres dans cette boucle quand la variable n'est pas initialisée.
Hors ligne
#9 Le 25/09/2015, à 18:24
- Boombastick
Re : Erreur de boucle avec while
Ok mais je fais comment du coup ?
Hors ligne
#10 Le 25/09/2015, à 18:33
- pingouinux
Re : Erreur de boucle avec while
Par exemple :
while true; do
read -p "${CGREEN}Nouveau mot de passe root : ${CEND}" ROOTP1
read -p "${CGREEN}Vérification du mot de passe : ${CEND}" ROOTP2
if [ "$ROOTP1" != "$ROOTP2" ]; then
echo -e "${CRED}Les mots de passe ne correspondent pas !${CEND}"
else break
fi
done
Hors ligne
#11 Le 25/09/2015, à 18:53
- Boombastick
Re : Erreur de boucle avec while
Par exemple :
while true; do read -p "${CGREEN}Nouveau mot de passe root : ${CEND}" ROOTP1 read -p "${CGREEN}Vérification du mot de passe : ${CEND}" ROOTP2 if [ "$ROOTP1" != "$ROOTP2" ]; then echo -e "${CRED}Les mots de passe ne correspondent pas !${CEND}" else break fi done
Que signifient true et break ? Pas dans le sens où true est valeur booléenne mais que signifie t-il avec while ?
Hors ligne
#12 Le 25/09/2015, à 18:55
- pingouinux
Re : Erreur de boucle avec while
Que signifient true et break ? Pas dans le sens où true est valeur booléenne mais que signifie t-il avec while ?
while true démarre une boucle sans fin, dont on sort par break.
Hors ligne
#13 Le 25/09/2015, à 19:04
- Boombastick
Re : Erreur de boucle avec while
Que signifient true et break ? Pas dans le sens où true est valeur booléenne mais que signifie t-il avec while ?
while true démarre une boucle sans fin, dont on sort par break.
Ok j'ai bité !
Une énième fois merci
Hors ligne