[bash] Problème de boucle
Résolu/Fermé
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
-
26 janv. 2010 à 11:45
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 26 janv. 2010 à 18:40
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 26 janv. 2010 à 18:40
A voir également:
- [bash] Problème de boucle
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Bash écrire dans un fichier - Forum Shell
- Redmi note 10 redemarre en boucle - Forum Xiaomi
- Retour à la ligne bash ✓ - Forum Shell
- Bash path - Astuces et Solutions
15 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
26 janv. 2010 à 16:02
26 janv. 2010 à 16:02
jp@MDK:~/tmpfs ssh$ ls rep/ paquet1 paquet2 paquet3 paquet4 jp@MDK:~/tmpfs ssh$ cat foo.sh #! /bin/sh #set -xv echo "Liste des paquets : " ls -1 rep/ | nl read -p "Choisissez le paquet à installer (entrez son numéro) : " choix nom="$(ls -1 rep/ | sed -n "${choix}p")" echo "Installation de ${nom} en cours..." jp@MDK:~/tmpfs ssh$ ./foo.sh Liste des paquets : 1 paquet1 2 paquet2 3 paquet3 4 paquet4 Choisissez le paquet à installer (entrez son numéro) : 3 Installation de paquet3 en cours... jp@MDK:~/tmpfs ssh$
;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
26 janv. 2010 à 18:03
26 janv. 2010 à 18:03
ls -1 rep/
man ls pour plus d'explications.
-1 Présenter un fichier par ligne
|
Pipe. On envoie le résultat de "ls -1" à travers un "pipe" (filtre) à la prochaine commande
nl
man nl. Afficher un fichier en numérotant ses lignes.
nom="$(ls -1 rep/ | sed -n "${choix}p")"
On récupère dans une variable le fichier correspondant au numéro choisi à l'aide de la commande "sed"
man ls pour plus d'explications.
-1 Présenter un fichier par ligne
|
Pipe. On envoie le résultat de "ls -1" à travers un "pipe" (filtre) à la prochaine commande
nl
man nl. Afficher un fichier en numérotant ses lignes.
nom="$(ls -1 rep/ | sed -n "${choix}p")"
On récupère dans une variable le fichier correspondant au numéro choisi à l'aide de la commande "sed"
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
26 janv. 2010 à 11:59
26 janv. 2010 à 11:59
Salut,
Il faut des espaces autour du signe "égale" !
Il faut des espaces autour du signe "égale" !
if [ "${conf]" == 'o' ]; then
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 12:03
26 janv. 2010 à 12:03
merci jipicy
j'essai tout de suite
j'essai tout de suite
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 12:06
26 janv. 2010 à 12:06
Sa ne marche pas, je met mon code en entier
#!/bin/bash
demande2=non
for liste in `ls /home/mimic/Bureau/packages/`
do
echo $liste
done
echo Taper 1 Pour installer le premier item, tapez 2 pour installer le deuxieme...
read choix
if [ "$choix" == 'o' ]; then
#until [ $demande2="non"]; do
echo "Vous avez donc choisit Direct News en version pro ? [o/n]"
read conf
if [ "$conf" == 'o' ]; then
echo "L'installation de unzip va demarrer pour verifier si le paquet est installé"
sudo apt-get install unzip
cd /home/mimic/Bureau/packages
unzip directnews-4.10.1-pro.zip -d /home/mimic/Bureau/packages/DirectNewsPro/
echo "Archive decompressé"
#$demande = 'oui'
$demande2= oui
#elif [ $conf='n' ]; then
#$demande = 'non'
#$demande2=oui
else
echo "Reponse indisponible"
$demande2 = non
fi
#done
fi
if [ $choix=="2" ]; then
$demande2 = "non"
#until [ $demande2="non"]; do
echo "Vous avez donc choisit Direct News en version Open ? [o/n]"
read conf
if [ $conf=="o" ]; then
echo "L'installation de unzip va demarrer pour verifier si le paquet est installé"
sudo apt-get install unzip
cd /home/mimic/Bureau/packages
unzip directnews-4.10-open-20070618.zip -d /home/mimic/Bureau/packages/DirectNewsOpen/
echo "Archive decompressé"
$demande = "oui"
$demande2= "oui"
elif [ $conf=n ]; then
$demande = "non"
$demande2= "oui"
else
echo "Reponse indisponible"
$demande2 = "non"
fi
#done
fi
#!/bin/bash
demande2=non
for liste in `ls /home/mimic/Bureau/packages/`
do
echo $liste
done
echo Taper 1 Pour installer le premier item, tapez 2 pour installer le deuxieme...
read choix
if [ "$choix" == 'o' ]; then
#until [ $demande2="non"]; do
echo "Vous avez donc choisit Direct News en version pro ? [o/n]"
read conf
if [ "$conf" == 'o' ]; then
echo "L'installation de unzip va demarrer pour verifier si le paquet est installé"
sudo apt-get install unzip
cd /home/mimic/Bureau/packages
unzip directnews-4.10.1-pro.zip -d /home/mimic/Bureau/packages/DirectNewsPro/
echo "Archive decompressé"
#$demande = 'oui'
$demande2= oui
#elif [ $conf='n' ]; then
#$demande = 'non'
#$demande2=oui
else
echo "Reponse indisponible"
$demande2 = non
fi
#done
fi
if [ $choix=="2" ]; then
$demande2 = "non"
#until [ $demande2="non"]; do
echo "Vous avez donc choisit Direct News en version Open ? [o/n]"
read conf
if [ $conf=="o" ]; then
echo "L'installation de unzip va demarrer pour verifier si le paquet est installé"
sudo apt-get install unzip
cd /home/mimic/Bureau/packages
unzip directnews-4.10-open-20070618.zip -d /home/mimic/Bureau/packages/DirectNewsOpen/
echo "Archive decompressé"
$demande = "oui"
$demande2= "oui"
elif [ $conf=n ]; then
$demande = "non"
$demande2= "oui"
else
echo "Reponse indisponible"
$demande2 = "non"
fi
#done
fi
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
26 janv. 2010 à 12:14
26 janv. 2010 à 12:14
echo Taper 1 Pour installer le premier item, tapez 2 pour installer le deuxieme...
read choix
if [ "$choix" == 'o' ]; then
Forcément la condition est toujours fausse ;-((
read choix
if [ "$choix" == 'o' ]; then
Forcément la condition est toujours fausse ;-((
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 12:22
26 janv. 2010 à 12:22
la honte j'ai mal recopier le code que tu m'avais donné (j'evite le copier coller quand j'apprend)
j'essai et je dit le resultat que j'obtient
j'essai et je dit le resultat que j'obtient
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 13:15
26 janv. 2010 à 13:15
sa marche beaucoup mieux :)
pourrait tu me dire ce que je pourrai faire pour optimiser mon script :
j'utilise deux grandes boucles if avec les memes choses dedans
je pourrai pas faire un for qui choisirait de faire tel instructions en fonction de tels choix
par exemple :
#!/bin/bash
demande2=non
i=0
for liste in `ls /home/mimic/Bureau/packages/`
do
echo "$liste"
done
echo Taper 1 Pour installer le premier item, tapez 2 pour installer le deuxieme...
read choix
for liste in `ls /home/mimic/Bureau/packages/`
do
///INSTRUCTION
done
exit;
pourrait tu me dire ce que je pourrai faire pour optimiser mon script :
j'utilise deux grandes boucles if avec les memes choses dedans
je pourrai pas faire un for qui choisirait de faire tel instructions en fonction de tels choix
par exemple :
#!/bin/bash
demande2=non
i=0
for liste in `ls /home/mimic/Bureau/packages/`
do
echo "$liste"
done
echo Taper 1 Pour installer le premier item, tapez 2 pour installer le deuxieme...
read choix
for liste in `ls /home/mimic/Bureau/packages/`
do
///INSTRUCTION
done
exit;
garion28
Messages postés
1543
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
404
26 janv. 2010 à 14:10
26 janv. 2010 à 14:10
relis ton code, tu met une valeur alphanumérique dans une variable, mais cette valeur n'est pas entre ""
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 15:22
26 janv. 2010 à 15:22
merci du conseil
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
26 janv. 2010 à 15:25
26 janv. 2010 à 15:25
Il y a quoi dans "/home/mimic/Bureau/packages/" ?
S'il n'y a que 2 objets (apparemment connus d'avance), pourquoi faire un listing depuis une boucle ?
S'il n'y a que 2 objets (apparemment connus d'avance), pourquoi faire un listing depuis une boucle ?
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 15:42
26 janv. 2010 à 15:42
C'est mon maitre de stage qui me demande sa
pour me permettre de me familiariser avec le shell
et proposer a des clients l'installations rapide des deux items connus dans ce repertoire (packages)
pour me permettre de me familiariser avec le shell
et proposer a des clients l'installations rapide des deux items connus dans ce repertoire (packages)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
>
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 15:43
26 janv. 2010 à 15:43
S'il n'y a que 2 items, connus qui plus est, pourquoi s'embêter avec une boucle ?
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
26 janv. 2010 à 15:45
26 janv. 2010 à 15:45
c'est au cas ou on rajouterai plein d'autres archives dedans
merci de tes reponses et d'essayer de m'aider :)
merci de tes reponses et d'essayer de m'aider :)
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 15:26
26 janv. 2010 à 15:26
j'ai fait ce code...
Mais sa me retourne un probleme :
./script.sh: line 16: 0 : commande introuvable
directnews-4.10.1-pro.zip
./script.sh: line 16: 1 : commande introuvable
Que faire ?
#!/bin/bash demande2=non i=1 for liste in `ls /home/mimic/Bureau/packages/` do echo "$((i++)) $liste" done echo Taper 1 Pour installer le premier item, tapez 2 pour installer le deuxieme... read choix i=0 for liste in `ls /home/mimic/Bureau/packages/` do $((i++)) if [ $choix == $i ]; then echo $liste else continue fi done exit;
Mais sa me retourne un probleme :
./script.sh: line 16: 0 : commande introuvable
directnews-4.10.1-pro.zip
./script.sh: line 16: 1 : commande introuvable
Que faire ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
26 janv. 2010 à 15:41
26 janv. 2010 à 15:41
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 15:43
26 janv. 2010 à 15:43
fait ;)
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 17:55
26 janv. 2010 à 17:55
merci beaucoup c'est une bonne methode
Pourrait tu juste m'expliquer ces lignes :
et
Pourrait tu juste m'expliquer ces lignes :
ls -1 rep/ | nl
et
nom="$(ls -1 rep/ | sed -n "${choix}p")"
aymbob
Messages postés
147
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
12 octobre 2010
26 janv. 2010 à 18:24
26 janv. 2010 à 18:24
Je ne te remercierai jamais assez pour toutes ces informations precieuses qui me font progresser
juste pour sa :
nom="$(ls -1 rep/ | sed -n "${choix}p")"
je ne comprend pas a quoi sert le p a la fin de la commande
merci encore
juste pour sa :
nom="$(ls -1 rep/ | sed -n "${choix}p")"
je ne comprend pas a quoi sert le p a la fin de la commande
merci encore
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
26 janv. 2010 à 18:40
26 janv. 2010 à 18:40
Le "p" fait partie de la syntaxe de "sed" et est conjointement lié à l'option "-n".
En gros on demande à n'afficher que la ligne correspondant au motif (son numéro), afin de la récupérer dans la variable...
Voir SED - les commandes
Extrait :
En gros on demande à n'afficher que la ligne correspondant au motif (son numéro), afin de la récupérer dans la variable...
Voir SED - les commandes
Extrait :
p print affichage (intervalle d'adresse autorisée) * Affiche à l'écran l'enregistrement courant (l'espace de travail). Elle n'efface pas l'espace de travail et ne modifie pas non plus le déroulement du script. Cette commande est toujours employée conjointement avec l'option "-n", sans quoi l'affichage de la ligne est dupliquée. (Préférer la seconde forme mieux adaptée du fait que le script s'achève dès que le motif ou la ligne rencontré est affichée sur la sortie standard sans continuer à parcourir le reste du fichier)