#1 Le 17/12/2009, à 12:31
- aromabar
[Résolu]probleme bouque (newby en force)
bonjour,
voila je viens de me mettre au script et pour me faire la main, j'ai voulu en faire un petit.
il "marche" mais y a un point que je comprend pas.
#dialogue de début.
echo "bonjour, `whoami`"
echo "peut tu me dire quel format de ficher il faut convertir."
#choix du format en entrée.
select format in .wav .wma .mp3 .ogg
do
case $format in
".wav" | ".wma" | ".mp3" | ".ogg" ) break;;
"*") continue
esac
done
echo "merci"
#test de validité du format d'entrée
if [ -f *$format ]
then echo "il y a pas de $format"
elif [ ! -f *$format ]
then break
else continue
fi
echo "le format de sortie?"
#selection du format en sortie.
select out in .ogg .mp3 .wav .wma
do
case $out in
".wav" | ".wma" | ".mp3" | ".ogg") break;;
"*") continue
esac
done
echo "merci"
#boucle
for i in *$format
do ffmpeg -i "$i" -ab 192k "${i%"$format"}$out"
done
#suppression
echo "dois-je supprimer les originaux ????"
select suppr in oui non
do
case $suppr in
"oui" | "non") break;;
"*") continue;;
esac
done
#message de fin
echo "voila `whoami` c'est fait."
ce que je n'arrive pas a faire, c'est que le script s'arrête si je format de fichier est pas bon
#test de validité du format d'entrée
if [ ! -f *$format ]
then echo "il n'y a pas de $format"
else
then break
continue
fi
merci pour votre aide.
Dernière modification par aromabar (Le 17/12/2009, à 15:53)
Hors ligne
#2 Le 17/12/2009, à 13:31
- sputnick
Re : [Résolu]probleme bouque (newby en force)
#!/bin/bash
#
##dialogue de début.
echo "bonjour, `whoami`"
echo "peut tu me dire quel format de ficher il faut convertir."
Tester()
{
if [[ -f *$format ]]; then
break
else
echo >&2 "pas de fichiers $format !"
fi
}
#choix du format en entrée.
select format in .wav .wma .mp3 .ogg
do
case $format in
".wav" | ".wma" | ".mp3" | ".ogg" ) Tester ;;
"*") continue
esac
done
echo "merci"
echo "le format de sortie?"
#selection du format en sortie.
select out in .ogg .mp3 .wav .wma
do
case $out in
".wav" | ".wma" | ".mp3" | ".ogg") break;;
"*") continue
esac
done
echo "merci"
#boucle
for i in *$format
do ffmpeg -i "$i" -ab 192k "${i%"$format"}$out"
done
#suppression
echo "dois-je supprimer les originaux ????"
select suppr in oui non
do
case $suppr in
"oui" | "non") break;;
"*") continue;;
esac
done
#message de fin
echo "voila `whoami` c'est fait."
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 17/12/2009, à 13:52
- Totor
Re : [Résolu]probleme bouque (newby en force)
[[ -f *$format ]] : ceci ne fonctionne pas s'il y a plusieurs fichiers... (en tout cas avec ma version de bash (3))
Pour savoir s'il existe au moins un fichier correspondant : [[ "$(compgen -G *$format)" ]]
-- Lucid Lynx --
Hors ligne
#4 Le 17/12/2009, à 14:16
- sputnick
Re : [Résolu]probleme bouque (newby en force)
Oui,ca m'avait échappé, donc :
#!/bin/bash
#
##dialogue de début.
echo "bonjour, `whoami`"
echo "peut tu me dire quel format de ficher il faut convertir."
Tester()
{
shopt -s nullglob
x=( *$format )
if (( ${#x[@]} != 0 )); then
break
else
echo >&2 "pas de fichiers $format !"
fi
}
#choix du format en entrée.
select format in .wav .wma .mp3 .ogg
do
case $format in
".wav" | ".wma" | ".mp3" | ".ogg" ) Tester ;;
"*") continue
esac
done
echo "merci"
echo "le format de sortie?"
#selection du format en sortie.
select out in .ogg .mp3 .wav .wma
do
case $out in
".wav" | ".wma" | ".mp3" | ".ogg") break;;
"*") continue
esac
done
echo "merci"
#boucle
for i in *$format
do ffmpeg -i "$i" -ab 192k "${i%"$format"}$out"
done
#suppression
echo "dois-je supprimer les originaux ????"
select suppr in oui non
do
case $suppr in
"oui" | "non") break;;
"*") continue;;
esac
done
#message de fin
echo "voila `whoami` c'est fait."
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 17/12/2009, à 15:03
- Totor
Re : [Résolu]probleme bouque (newby en force)
par ailleurs, il y a 2 erreurs dans "*") continue :
1 : il ne faut pas encadrer * par les guillemets (sinon, le cas ne sera jamais vérifié)
2 : il manque ;; après continue
De toute façon, cette ligne ne sert à rien s'il n'y a pas d'autres traitements que le continue (ex : affichage d'un texte d'erreur). Et puis, c'est la logique du script veut que ce soit le traitement par défaut.
Enfin, par principe, il faudrait désactiver l'option nullglob après la création du tableau nommé x (pour aromabar : shopt -u nullglob)
ben alors sputnick ?
-- Lucid Lynx --
Hors ligne
#6 Le 17/12/2009, à 15:13
- sputnick
Re : [Résolu]probleme bouque (newby en force)
On s'en fout de shopt -u nullglob puisque ca reste que le temps de l'éxécution du script.
Pour le reste je ne me suis pas penché en détail sur les erreurs éventuelles, on va pas tout faire quand même
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#7 Le 17/12/2009, à 15:18
- Radline
Re : [Résolu]probleme bouque (newby en force)
Pour info "Peux-tu" sera mieux
Si tu sais, tu fais. Si tu sais PAS, tu fais PAS!
Ubuntu 21.10 64bits sur AMD FX 8320 /CM: Gigabyte 990XA-UD3, 8Go de RAM, CG : Nvidia GTX960, Son: Soundblaster X-Fi
Ubuntu 18.04 64bits LTS sur HP Probook 6560b
Lubuntu 18.04 64bits LTS sur AMD Athlon 64 X2 4000+
Hors ligne
#8 Le 17/12/2009, à 15:22
- Totor
Re : [Résolu]probleme bouque (newby en force)
On s'en fout de shopt -u nullglob puisque ca reste que le temps de l'éxécution du script.
c'est bien pour cela que j'ai mis par principe car c'est dans le même process et pour revenir à l'état initiale (on ne sait pas ce qu'il y aura après)
Pour le reste je ne me suis pas penché en détail sur les erreurs éventuelles, on va pas tout faire quand même
y'a de forte chance que l'on y soit revenu tout de même ...enfin, si aromabar se réveille
-- Lucid Lynx --
Hors ligne
#9 Le 17/12/2009, à 15:43
- aromabar
Re : [Résolu]probleme bouque (newby en force)
re,
merci à vous.:D
pour info, c'est ma première dans le "monde" du script.
Et y a un truc que je comprend pas.
c'est quoi "x=( *$format )" c'est en rapport avec la ligne du dessus ??
et aussi "if (( ${#x[@]}"
je pense avoir compris le chmilblick.
Merci
Hors ligne
#10 Le 17/12/2009, à 16:12
- Totor
Re : [Résolu]probleme bouque (newby en force)
rapidement ...
x=( *$format ) : création d'un tableau nommé x contenant la liste des fichiers répondant au pattern *$format
(( ${#x[@]} -ne 0 )) : test si le nombre d'élément du tableau x est différent de 0
shopt -s nullglob : permet de ne rien renvoyer si l'expension du pattern ne correspond à aucun fichier (le comportement pas défaut est de retourner le pattern)
-- Lucid Lynx --
Hors ligne
#11 Le 17/12/2009, à 17:11
- sputnick
Re : [Résolu]probleme bouque (newby en force)
Si tu tient à te servir de cette syntaxe non intuitive, utilise ça -ne :
[[ ${#x[@]} -ne 0 ]]
Sinon cela est beaucoup plus intuitif :
(( ${#x[@]} != 0 ))
man bash taper /\(\(
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#12 Le 18/12/2009, à 05:48
- aromabar
Re : [Résolu]probleme bouque (newby en force)
merci pour la lecture
Hors ligne
#13 Le 18/12/2009, à 10:33
- Totor
Re : [Résolu]probleme bouque (newby en force)
Si tu tient à te servir de cette syntaxe non intuitive, utilise ça -ne [..]
C'est une erreur de ma part car je n'ai pas fait de copier/coller et que par habitude j'utilise l'ancienne version (bien que je connaisse les 2 syntaxes) qui est à titre personnel pas moins intuitive de par la connaissance de la signification des abréviations ne, eq, le, lt, gt, ge ...
Je ne trouve pas d'intérêt à utiliser l'autre. Peut-être as-tu un argument qui me fasse changer d'avis ?
-- Lucid Lynx --
Hors ligne
#14 Le 18/12/2009, à 11:14
- aromabar
Re : [Résolu]probleme bouque (newby en force)
re
au faite, c'est plus [@] que j'ai pas compris
petite question au passage.
je viens de voir que l'on peut faire '≤' '≥' facilement au clavier (découverte, y a 30s)
puis-je les inclure dans un script, ou dois-je faire avec les équivalent "texte" ou autre.
Merci.
ps ce soir "normalement" je dois voir des potes programmeurs, je leur poserai la question.
Hors ligne
#15 Le 18/12/2009, à 13:46
- n3o51
Re : [Résolu]probleme bouque (newby en force)
je viens de voir que l'on peut faire '≤' '≥' facilement au clavier (découverte, y a 30s)
Bonjour echo "≥"c'est ça que tu veut ? l'afficher ?
Welcome to the real world
________________________________
Hors ligne
#16 Le 18/12/2009, à 19:01
- aromabar
Re : [Résolu]probleme bouque (newby en force)
bonjour,
Bonjour echo "≥"c'est ça que tu veut ? l'afficher ?
nan, ça je sais faire (enfin je pense on sais jamais ....)
dans ce bout
(( ${#x[@]} != 0 ))
il y a "!=0", imaginons que je voulais ecrire '≤' ou '≥' à la place de "diff de 0" (dans notre cas).
es ce que c'est possible ou faut que je mettes (je sais pas l'équivalent) -ne ou -ge.
je pense que ça peut passer mais comme le site ou je lis c'est le bordel encore pour moi(ca fait que 2 jours que je l'ai trouvé, j'ai pas pris mes repaires encore)je re trouve pas cette info.
mais si je me rappel bien je crois que cetait plus un truc du genre "<=" ou ">=".
Merci
Hors ligne
#17 Le 18/12/2009, à 19:29
- sputnick
Re : [Résolu]probleme bouque (newby en force)
man bash :
CALCUL ARITHMÉTIQUE
Le shell permet, dans certaines circonstances, l'évaluation d'expressions arithmétiques (voir les commandes internes let et declare ainsi que le paragraphe
Évaluation Arithmétique). L'évaluation est effectuée en utilisant des entiers longs, sans vérification du débordement. Néanmoins, la division par 0 est
détectée et renvoie une erreur. La liste des opérateurs ci-dessous, leur priorité, associativité et valeur sont les mêmes que dans le language C. Les
niveaux sont classés en ordre de précédence décroissante.- + plus et moins unaire
! ~ négations logique et binaire
** exponentiation
* / % multiplication, division, reste
+ - addition, soustraction
<< >> décalage arithmétique à gauche et à droite
<= >= < >
comparaisons
== != égalité et différence
& ET binaire
^ OU exclusif binaire
| OU binaire
&& ET logiqueman bash
|| OU logique
expr?expr:expr
opérateur conditionnel
= *= /= %= += -= <<= >>= &= ^= |=
assignations
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#18 Le 18/12/2009, à 19:35
- sputnick
Re : [Résolu]probleme bouque (newby en force)
x=( a b c ) # declaration d'un tableau
echo ${x[1]} # deuxieme indice ( on part de zero donc affiche b )
echo ${x[@]} # on affiche toutes les valeures
echo ${#x[@]} # on affiche le nombre d'indices ( clefs )
Dernière modification par sputnick (Le 18/12/2009, à 19:35)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#19 Le 18/12/2009, à 19:39
- aromabar
Re : [Résolu]probleme bouque (newby en force)
MERCI,
j'avais pas vu ce passage.:rolleyes:
et encore MERCI, pour le deuxieme poste.
vais me mettre tout ça 'de coté'.
Bonne soirée (sous la neige par chez moi) et bon week-end.
Hors ligne