#1 Le 26/02/2015, à 16:05
- war_machine1
[Résolu]retour comande ls dans plusieur variable
bonjour
je souhaiterais transformer retour commande ls en plusieurs variable
pour les utilise dans différente commande qui ne permettrons avec ce code
http://forum.ubuntu-fr.org/viewtopic.php?id=1582171
de lancer différent serveur minecraft s'en avoir a retaper le nom du dossier ou ce trouve les different .jar
en gros que la comande
ls /home/$USER/serveur/serveur/
me donne un truc du genre
v1=$dossier1
v2=$dossier2
v3=$dossier3
Dernière modification par war_machine1 (Le 26/02/2015, à 19:47)
Hors ligne
#2 Le 26/02/2015, à 17:12
- nany
Re : [Résolu]retour comande ls dans plusieur variable
Bonjour,
le lien que tu donnes parle essentiellement de tableau, or il est très simple de faire un tableau avec la commande ls.
Mais peux-tu donner un script pour lequel cette commande devrait être utilisée ?
À défaut, peux-tu être plus précis quant à la structure exacte de tes répertoires ?
En gros, donne le retour de la commande ls en question car c’est actuellement difficile de connaître ton arborescence exacte.
Hors ligne
#3 Le 26/02/2015, à 17:21
- war_machine1
Re : [Résolu]retour comande ls dans plusieur variable
la commande
ls /home/warmachine/serveur/serveur
me retourne
aa aae aaz dd e eee gotospace test ville zz
la commande pour laquelle j'en ai besoin
cd /home/$USER/serveur/serveur/$nom-du_dossier/;
java -jar minecraft_server.jar nogui;
script complet http://pastebin.com/t3BSFYs1
si on peux mettre les nom des dossier directment dans les tableaux et naviguer avec et lancer les serveur je suis preneur
EDIT t'on idée de ce servir du ls pour remplir le tableaux ce bien trouver,les nom son bien afficher mais quand j'en choisi sa m'ecrit un chiffre dans la commande pour lancer le serveur et pas le nom du dossier
select=1 #selection de la premiere valeur en surbrillance
tableau=( $(ls -1) ) #remise a zero du tableau au cas de plusieurs utilisation de menu
tableau[0]="**************MENU****************" #0-Titre du menu
tableau[5]=''
menu #lancement du menu
case $select in
*) #lancer un serveur
cd /home/$USER/serveur/serveur/$select/;
java -jar minecraft_server.jar nogui
;;
EDIT encore j'ai trouver merci t'on idée de tableau ma bien des bloquer
select=1 #selection de la premiere valeur en surbrillance
tableau=( $(ls -1) ) #remise a zero du tableau au cas de plusieurs utilisation de menu
tableau[0]="************SERVEUR***************" #0-Titre du menu
menu #lancement du menu
case $select in
*) #lancer un serveur
cd /home/$USER/serveur/serveur/`echo ${tableau[$select]}`/;
java -jar minecraft_server.jar nogui
;;
Dernière modification par war_machine1 (Le 26/02/2015, à 18:56)
Hors ligne
#4 Le 26/02/2015, à 18:53
- nany
Re : [Résolu]retour comande ls dans plusieur variable
Ok. Tu avais fait des doublons de la fonction de menu en faisant un copier-coller.
Voici ma proposition de correction de ton script à tester :
#! /bin/bash
#couleur du menu
affselect1='\E[31;47m' #couleur rouge sur fond blanc
affselect2='\E[41;33m' #couleur jaune sur fond rouge
defaut='\E[37;40m' #couleur du shell ecriture blanche fond noir
#######echo : affichage des couleurs (surbrillance)######
function cmenu () {
message=${1}
couleur=${2:-$defaut} #couleur si non indique alors couleur defaut par defaut
echo -e "$couleur $message $defaut"
return
}
#######affichage du menu avec la selection (surbrillance)######
function affmenu () {
clear
cmenu "${tableau[0]}" $affselect2 #Titre du menu
echo
for (( i=1; i<=$((${#tableau[*]}-1)); i++ )) do
if [ $i = $1 ]
then
cmenu "${tableau[$i]}" $affselect1
else
cmenu "${tableau[$i]}"
fi
done
return
}
#######navigation du menu avec affichage du menu######
function menu () {
affmenu $select
while read -sN1 key
do
read -sN1 -t 0.0001 k1 ; read -sN1 -t 0.0001 k2 ; read -sN1 -t 0.0001 k3
key+=${k1}${k2}${k3}
case "$key" in
$'\e[A'|$'\e0A') #fleche Haut select-1
((select--)) ; ((select < 1)) && ((select=1));;
$'\e[B'|$'\e0B') #fleche Bas select+1
((select++)) ; ((select > $((${#tableau[*]}-1)))) && ((select=$((${#tableau[*]}-1))));;
q|'') #q ou entrer pour stopper
break
esac
affmenu $select
done
}
function menu0 () {
select=1 #selection de la premiere valeur en surbrillance
tableau=() #remise a zero du tableau au cas de plusieurs utilisation de menu
tableau[0]="**************MENU****************" #0-Titre du menu
tableau[1]="lancer"
tableau[2]="créer un serveur"
tableau[3]="sauvegarder"
tableau[4]="quitter"
menu #lancement du menu
case $select in
1) #lancer un serveur
menu1
;;
2) #crée un serveur
menu2
;;
3) #save
MAINTENANT=$(date +"%y-%m-%d-%H:%M:%S")
FILE="sauvegarde. $ NOW.tar.gz"
cd /home/$USER/serveur
echo $MAINTENANT
zip -r /home/warmachine/serveur/backup/$MAINTENANT.zip serveur
/home/$USER/serveur/serveur.desktop
;;
4) #quitter
exit 0
;;
esac
}
#thank http://forum.ubuntu-fr.org/viewtopic.php?id=1582171
function menu1 () {
select=1
tableau=("*******CHOIX DU SERVEUR*******" $(ls /home/$USER/serveur/serveur))
menu
cd /home/$USER/serveur/serveur/${tableau[$select]}/;
java -jar minecraft_server.jar nogui;
/home/$USER/serveur/start2.sh
}
function menu2 () {
echo -n "nom serveur : "
read on
select=1 #selection de la premiere valeur en surbrillance
tableau=() #remise a zero du tableau au cas de plusieurs utilisation de menu
tableau[0]="*******CHOIX DE LA VERSION*******" #0-Titre du menu
tableau[1]="1.6.4forge"
tableau[2]="quitter"
menu #lancement du menu
case $select in
1) #1.6.4forge
mkdir /home/$USER/serveur/serveur/$on; cp -r /home/warmachine/serveur/serveur_instal/164F/* /home/$USER/serveur/serveur/$on;
/home/$USER/serveur/serveur.desktop
;;
2) #quitter
menu0
esac
}
menu0
exit 0
EDIT : je viens de voir ton edit. Tu n’étais pas loin mais $select correspond au numéro de l’entrée de menu, le contenu étant ${tableau[$select]}.
Dernière modification par nany (Le 26/02/2015, à 18:59)
Hors ligne
#5 Le 26/02/2015, à 19:33
- war_machine1
Re : [Résolu]retour comande ls dans plusieur variable
merci pour cette correction amélioration sa fonctionne, merci encore s'en toi je serait encore bloqué
P.s: j'ai rajouter la suppression de serveur
#! /bin/bash
#couleur du menu
affselect1='\E[31;47m' #couleur rouge sur fond blanc
affselect2='\E[41;33m' #couleur jaune sur fond rouge
defaut='\E[37;40m' #couleur du shell ecriture blanche fond noir
#######echo : affichage des couleurs (surbrillance)######
function cmenu () {
message=${1}
couleur=${2:-$defaut} #couleur si non indique alors couleur defaut par defaut
echo -e "$couleur $message $defaut"
return
}
#######affichage du menu avec la selection (surbrillance)######
function affmenu () {
clear
cmenu "${tableau[0]}" $affselect2 #Titre du menu
echo
for (( i=1; i<=$((${#tableau[*]}-1)); i++ )) do
if [ $i = $1 ]
then
cmenu "${tableau[$i]}" $affselect1
else
cmenu "${tableau[$i]}"
fi
done
return
}
#######navigation du menu avec affichage du menu######
function menu () {
affmenu $select
while read -sN1 key
do
read -sN1 -t 0.0001 k1 ; read -sN1 -t 0.0001 k2 ; read -sN1 -t 0.0001 k3
key+=${k1}${k2}${k3}
case "$key" in
$'\e[A'|$'\e0A') #fleche Haut select-1
((select--)) ; ((select < 1)) && ((select=1));;
$'\e[B'|$'\e0B') #fleche Bas select+1
((select++)) ; ((select > $((${#tableau[*]}-1)))) && ((select=$((${#tableau[*]}-1))));;
q|'') #q ou entrer pour stopper
break
esac
affmenu $select
done
}
function menu0 () {
select=1 #selection de la premiere valeur en surbrillance
tableau=() #remise a zero du tableau au cas de plusieurs utilisation de menu
tableau[0]="**************MENU****************" #0-Titre du menu
tableau[1]="lancer"
tableau[2]="créer un serveur"
tableau[3]="sauvegarder"
tableau[4]="!!suprimer un serveur!!"
tableau[5]="quitter"
menu #lancement du menu
case $select in
1) #lancer un serveur
menu1
;;
2) #crée un serveur
menu2
;;
3) #save
MAINTENANT=$(date +"%y-%m-%d-%H:%M:%S")
FILE="sauvegarde. $ NOW.tar.gz"
cd /home/$USER/serveur
echo $MAINTENANT
zip -r /home/warmachine/serveur/backup/$MAINTENANT.zip serveur
/home/$USER/serveur/serveur.desktop
;;
4) #!!supprimer un serveur!!
menu3
;;
5) #quitter
exit 0
;;
esac
}
function menu1 () {
select=1
tableau=("*******CHOIX DU SERVEUR*******" $(ls /home/$USER/serveur/serveur))
menu
cd /home/$USER/serveur/serveur/${tableau[$select]}/;
java -jar minecraft_server.jar nogui;
/home/$USER/serveur/start2.sh
}
function menu2 () {
echo -n "nom serveur : "
read on
select=1
tableau=("******CHOIX DE LA VERSION*****" $(ls /home/$USER/serveur/serveur_instal))
menu #lancement du menu
mkdir /home/$USER/serveur/serveur/$on; cp -r /home/warmachine/serveur/serveur_instal/${tableau[$select]}/* /home/$USER/serveur/serveur/$on;
chmod +x /home/warmachine/serveur/serveur/$on/minecraft_server.jar;
/home/$USER/serveur/start2.sh
}
function menu3 () {
select=1
tableau=("*CHOIX DU SERVEUR A SUPPRIMER*" $(ls /home/$USER/serveur/serveur))
menu #lancement du menu
rm -r -i /home/$USER/serveur/serveur/${tableau[$select]}/;
/home/$USER/serveur/start2.sh
}
menu0
exit 0
#merci a nany de http://forum.ubuntu-fr.org pour son aide precieuse
#merci a casperfr de http://forum.ubuntu-fr.org pour son code dinterface clavier
Dernière modification par war_machine1 (Le 26/02/2015, à 19:37)
Hors ligne
#6 Le 26/02/2015, à 19:43
- nany
Re : [Résolu]retour comande ls dans plusieur variable
Bon ben c’est cool. Tu devrais pouvoir t’en sortir tout seul pour d’autres améliorations maintenant que tu as compris le principe de ce script de menu.
Tu peux éditer le premier message de cette discussion pour mettre [Résolu] au début du titre.
Dernière modification par nany (Le 26/02/2015, à 19:43)
Hors ligne
#7 Le 26/02/2015, à 19:49
- war_machine1
Re : [Résolu]retour comande ls dans plusieur variable
ce fait pour un premier script en shell je crois que ce pas mal
Hors ligne
#8 Le 26/02/2015, à 22:24
- Watael
Re : [Résolu]retour comande ls dans plusieur variable
salut,
c'est pas la meilleure idée de remplir un tableau, directement, avec une substitution de commande, car la sortie de la commande sera coupée en mots :
$ monTableau=( $(printf '%s\n' 'le contenu' de 'mon tableau') )
$ printf '%s\n' "${monTableau[@]}"
le
contenu
de
mon
tableau
«oui, mais ce n'est pas le cas ici !»
ça ne dispense pas de prodiguer les meilleures pratiques :
$ monTableau=("bla bla")
$ while read line; do monTableau+=( "$line" ); done < <(printf '%s\n' 'le contenu' de 'mon tableau')
et puisqu'ici, il est question de fichiers :
$ monTableau=("bla bla")
$ for f in $rep/*; do monTableau+=( "${f##*/}" ); done
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne