Convertir une commande Batch en une commande Bash

Résolu/Fermé
all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 - 16 août 2013 à 16:27
all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 - 20 août 2013 à 11:23
Bonjour, depuis un moment je travaille sur la création d'un installateur pour mon petit logiciel Batch/Bash et j'essaie de convertir cette ligne de code en Bash :

for /f "eol=; tokens=* delims=," %%a in (options.txt) do echo %%a>%%a.txt

Si se n'est pas possible j'aimerai trouver une alternative afin qu'après la saisit clavier d'un l'utilisateur ayant choisit dans une liste numéroté une à plusieurs options, cela résultant d'un fichier options.txt contenant les options de cette manière : 1,2,4,etc. je puisse tester la présence de celle-ci pour pouvoir ensuite affecter de nouvelles valeurs à de nouvelles variables.

Merci d'avance, all94

2 réponses

all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 6
16 août 2013 à 17:12
Désolé, je viens de trouver la solution à mon problème :
il suffisais d'utiliser la commande sed pour remplacer les virgules par des espaces et récupérer le contenue du fichier avec options=$(cat options.txt).

Cordialement, all94
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 567
16 août 2013 à 17:19
Salut,

Il aurait été plus simple d'expliquer directement ce que tu voulais, plutôt que de nous mettre l'équivalent en batch ;-(

D'autant que "sed" me parait inutile, bash pouvant traiter ta demande tout seul :

$ cat options.txt 
1,2,3,4,5

$ option=$(cat options.txt) 

$ echo "${option}"
1,2,3,4,5

$ echo "${option//,/ }"
1 2 3 4 5
0
all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 6
Modifié par all94 le 19/08/2013 à 19:06
Bonjour, merci de ta réponse mais je ne comprend pas ta dernière ligne car je m'y suis mis à Bash que depuis peu de temps et j'ai encore du chemin à parcourir pour m'améliorer.
Selon moi, tu rajoute des paramètre pour que les virgule devienne des espaces mais cela sans que cela ne soit effectif tout le temps, si un moment donné tu dois taper tout simplement le nom de la varable sans aucun paramètre. Après je peux me tromper étant donner que je ne fais que la déduire et que je ne la comprend pas vraiment.

Sinon voici le code qui fonctionne à présent pour une liste à 4 choix possible :
read -p "> " choixlaunch
echo $choixlaunch>options.txt
sed -e 's/,/ /g' options.txt>options.txt
choixlaunch=$(cat options.txt)
rm options.txt


Cordialement, all94
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 567
19 août 2013 à 19:10
La dernière ligne fait la même chose que ta ligne avec "sed". Dans bash on appelle ça le développement des paramètres. Là en l'occurrence c'est de la substitution de motif, tout comme sed, mais c'est propre au shell et on n'a pas besoin de faire appel à une commande externe.

$ A="1,2,3,4,5"

$ echo "${A}"
1,2,3,4,5

$ echo "${A}" | sed 's/,/ /g'
1 2 3 4 5

$ echo "${A//,/ }"
1 2 3 4 5
0
all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 6
Modifié par all94 le 20/08/2013 à 11:24
Bonjour, merci beaucoup pour ta réponse, grâce à toi je vais pourvoir enrichir mes connaissances en programmation Bash.

Merci encore, all94
0