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 25/09/2015, à 12: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, à 12: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, à 12:47

Boombastick

Re : Erreur de boucle avec while

Merci dude ! Une fois de plus ^^

Hors ligne

#4 Le 25/09/2015, à 17: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, à 17:09)

Hors ligne

#5 Le 25/09/2015, à 17: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 résolu, 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, à 18:39

Boombastick

Re : Erreur de boucle avec while

erresse a écrit :

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 hmm

Hors ligne

#7 Le 25/09/2015, à 18: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 résolu, 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, à 18: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, à 19:24

Boombastick

Re : Erreur de boucle avec while

Ok mais je fais comment du coup ?

Hors ligne

#10 Le 25/09/2015, à 19: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, à 19:53

Boombastick

Re : Erreur de boucle avec while

pingouinux a écrit :

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, à 19: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, à 20:04

Boombastick

Re : Erreur de boucle avec while

pingouinux a écrit :

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 wink

Hors ligne