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 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. wink

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 wink 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]}. wink

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. wink

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 wink

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