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 17/12/2009, à 13: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, à 16:53)

Hors ligne

#2 Le 17/12/2009, à 14: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, à 14: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, à 15: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, à 16: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 ? wink


-- Lucid Lynx --

Hors ligne

#6 Le 17/12/2009, à 16: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 wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#7 Le 17/12/2009, à 16:18

Radline

Re : [Résolu]probleme bouque (newby en force)

Pour info "Peux-tu" sera mieux wink


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, à 16:22

Totor

Re : [Résolu]probleme bouque (newby en force)

sputnick a écrit :

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)

sputnick a écrit :

Pour le reste je ne me suis pas penché en détail sur les erreurs éventuelles, on va pas tout faire quand même wink

y'a de forte chance que l'on y soit revenu tout de même ...enfin, si aromabar se réveille wink


-- Lucid Lynx --

Hors ligne

#9 Le 17/12/2009, à 16: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, à 17: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, à 18: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, à 06:48

aromabar

Re : [Résolu]probleme bouque (newby en force)

merci pour la lecture smile

Hors ligne

#13 Le 18/12/2009, à 11:33

Totor

Re : [Résolu]probleme bouque (newby en force)

sputnick a écrit :

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, à 12: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, à 14: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, à 20: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, à 20: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, à 20: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, à 20:35)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#19 Le 18/12/2009, à 20:39

aromabar

Re : [Résolu]probleme bouque (newby en force)

MERCI, smile
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