linux bash case [RESOLU] - Shell/Batch - Programmation
Marsh Posté le 18-05-2011 à 16:40:27
Re à tous,
Personnes une idée pour que mon interface puisse ce promenner dans les différentes case ? Vers le haut, vers le bas etc.
Exemple : depuis la case Funradio vers Internet, etc.
...
Marsh Posté le 18-05-2011 à 17:40:37
Pour l'instant, ton script affiche 3 boites de dialogue et récupère le choix de l'utilisateur dans 3 variables. Puis il traite les valeurs de ces variables.
Je ne suis pas un crack en bash, mais je pense que l'utilisation de fonctions peut résoudre en partie ton problème. L'idée est de mettre tes lignes 3, 5 et 6 dans 3 fonctions et d'appeler ces fonctions chaque fois que tu veux "rafraichir" une variable avec une nouvelle saisie utilisateur.
Par exemple pour la ligne 3, tu déclares :
Code :
|
Puis juste avant le case de la ligne 8, tu appelles une première fois fct_input pour initialiser la variable "input".
A la ligne 19, tu n'as qu'un appel de fonction (une des 3 que tu as créées) à faire pour afficher la boite de dialogue que tu veux.
Marsh Posté le 18-05-2011 à 19:35:22
Te remercie shaoyin, l'idée est plus propre.
Mais sa régle pas le fait que je désire pouvoir me promener dans les case ?!
Si à la ligne 19 je mets :
Code :
|
je réafiche l'input mais quand je choisis une action, dés lors, mon script s'arrête et pour ce cas présis une alternative est de le re appeler lui-même
Donc, ce promener dans les case est pas possible !
Je me souviens qu'en PHP, la fonction switch permettait cette manip :
Code :
|
Mais sa marche pas comme en php !?
...
Marsh Posté le 18-05-2011 à 22:51:09
Non, je ne crois pas que ce soit possible en bash. A part utiliser une boucle while...
edit : J'ai écrit un peu rapidement hier soir. Je ne connais pas PHP, mais le peu que j'ai lu sur le "switch" me laisse à penser qu'il fonctionne exactement de la même façon que le "case" du bash. Ces mot-clés sont utilisés pour tester la valeur d'une variable sans passer par des "if - else" à répétition.
Pour moi, le bout de code que tu donnes sur "switch" est équivalent à :
Code :
|
Le test ne s'opère qu'une seule fois, et on ne revient pas en arrière.
Pour ton problème, je pense que tu dois mettre ton bloc 'case' à l'intérieur d'une boucle 'while', dont tu ne sors que si la variable 'input' vaut "Quitter"
Marsh Posté le 19-05-2011 à 17:28:17
Te remercie shaoyin,
En effet, une fonction while do done est une solution fonctionnelle, je vais m'en contenter. Dommage de mobiliser de la ressource système pour une boucle qui attend Quitter
Une autre solution serai de charger les jets PHP (apt-get install php5 php5-cli) DEBIAN (cli pour command-line) mais ce serai remplacer une charge while par un jet qui tourne en tâche de fond, donc c'est plus du que du
Bon, je laisse le poste ouvert, je termine mon script et je le mettrais en guise de conclusion à valeur moyenne.
Dans tous les cas, merci à toi shaoyin pour tes pistes.
...
Marsh Posté le 19-05-2011 à 17:42:40
Si je ne me trompe pas, tu dois rester bloqué dans un appel à zenity dans le while. Donc normalement tu ne devrais pas consommer de ressources.
Pour t'en assurer, tu peux lancer la commande "top" dans une autre console pendant que ton script tourne.
Marsh Posté le 25-05-2011 à 17:45:25
Re à tous,
Voilà, je vous livre mon script. Il en est encore à un stade beta, mais on peut lui attribuer autant de fonction que l'on veut...
Dans un avenir proche une fonction rsync pour libérer de l'espace disque.
Donc, la vocation première de ce script est d'interfacer différentes fonctions pour en faciliter l'usage dans le cadre d'une becane de salon (MediaCenter) piloter par une zapette.
Si l'envie vous prend de l'optimiser, je suis prenneur je suis concient qu'il s'éloigne du titre du poste alors je vais le [RESOLU]
Code :
|
Salut à tous.
Pascal
Marsh Posté le 17-05-2011 à 18:13:15
Salut à tous,
Visiblement, j'ai un soucis de débutant et je tourne en rond
J'avoue plus savoir et ma logique est apparemment perfectible
Vos propositions sont les bienvenues.
...
Message édité par pascal_1212 le 25-05-2011 à 17:57:22