#1 Le 14/08/2010, à 04:35
- Hizoka
[resolu] simplifaction avec un contraire de case
Bonsoir,
je cherche un moyen de simplifier ça :
# Si aucun audio n'est selectionné, on les degage
if [[ -z $(grep " -a " "${mkvmerge}") ]]
then
echo -n " -A" >> "${mkvmerge}"
fi
# Si aucune video n'est selectionnée, on les degage
if [[ -z $(grep " -d " "${mkvmerge}") ]]
then
echo -n " -D" >> "${mkvmerge}"
fi
# Si aucun sous-titre n'est selectionné, on les degage
if [[ -z $(grep " -s " "${mkvmerge}") ]]
then
echo -n " -S" >> "${mkvmerge}"
fi
j'avais pensé à case, mais :
for option in ${mkvmerge}
do
case ${option} in
# Si aucun audio n'est selectionné, on les degage
"-a") echo -n " -A" >> "${mkvmerge}" ;;
# Si aucune video n'est selectionnée, on les degage
"-d") echo -n " -D" >> "${mkvmerge}" ;;
# Si aucun sous-titre n'est selectionné, on les degage
"-s") echo -n " -S" >> "${mkvmerge}" ;;
# Si aucun fichier joint n'est selectionné, on les degage
"-m") echo -n " -M" >> "${mkvmerge}" ;;
esac
done
fais le contraire de ce que je veux.
Il y aurait la boucle :
for option in -a -d -s
do
[[ -z $(grep " ${option} " "${mkvmerge}") ]] && echo -n " ${option^^}" >> "${mkvmerge}"
done
qui devrait fonctionner, mais y a-t-il plus simple ?
merci
Dernière modification par Hizoka (Le 18/12/2011, à 01:36)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 14/08/2010, à 04:39
- sputnick
Re : [resolu] simplifaction avec un contraire de case
Je ne sait pas ce que vaut ${mkvmerge} mais j'ai l'impression que tu cherche à parser des arguments ; regarde du coté de getopts :
help getopts
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 14/08/2010, à 04:43
- Hizoka
Re : [resolu] simplifaction avec un contraire de case
non ce n'est pas pour des options mais pour créer un code à exécuter.
exemple de valeur pour mkvmerge :
mkvmerge -o "/home/hizoka/fichier.mkv" -d 1 -a 2 -S --no-chapters --no-global-tags -M "/home/hizoka/fichier_base.mkv" "/home/hizoka/audio.ac3"
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 14/08/2010, à 13:16
- Totor
Re : [resolu] simplifaction avec un contraire de case
Salut,
Pour éviter le boucle (Je ne sais pas si c'est une simplification mais bon) :
# suppression des options -A, -V et -S de la ligne de commande
printf "%s\n" -A -V -S|xargs -I{} sed -i '1 s/ {}//' "${mkvmerge}"
# ajout des options ( la suppression d'avant permet d'éviter les doublons)
sed -i '1 s/\(.*\)/\1 -A -V -S /' "${mkvmerge}"
# suppression des options -A, -V et -S si -a, -v et -s existent
printf "%s\n" -a -v -s|xargs -I{} grep -o -- {} "${mkvmerge}"|tr '[[:lower:]]' '[[:upper:]]'|xargs -I{} sed -i 's/ {} / /g' "${mkvmerge}"
en terme de compréhension, ce n'est pas le cas !
EDIT : la 1ère ligne peut être inutile si la redondance ne pose pas de problème
sinon, je pense que le mieux est :
( for option in -a -d -s
do
grep -q -- " ${option} " "${mkvmerge}" || echo -n " ${option^^}"
done
) >> "${mkvmerge}"
Dernière modification par Totor (Le 14/08/2010, à 13:22)
-- Lucid Lynx --
Hors ligne
#5 Le 14/08/2010, à 14:35
- Hizoka
Re : [resolu] simplifaction avec un contraire de case
merci, en effet la 2e soluce est légèrement plus compréhensible...
finalement j’étais pas trop mal
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 16/08/2010, à 08:11
- credenhill
Re : [resolu] simplifaction avec un contraire de case
hello
avec sed :
sed -i '/ -a/! s/$/ -A/;/ -d/! s/$/ -D/;/ -s/! s/$/ -S/' "${mkvmerge}"
Hors ligne
#7 Le 16/08/2010, à 17:26
- Hizoka
Re : [resolu] simplifaction avec un contraire de case
en effet, et c'est plus rapide qu'avec une boucle
merci.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne