Forum Programmation.shell Bash : Verification de la syntaxe d'un argument

Posté par  .
Étiquettes : aucune
0
19
juil.
2004
L'exécution du script bash que je suis en train de faire doit être de la forme:
./script fichier.truc

et je voudrais vérifier que l'argument est de la forme :
nom de base, un point et une extension.
Dans mon exemple, je veux donc séparer "fichier.truc" en : "fichier", "." et "truc".

Si vous avez des suggestions...
merci.
  • # Bash et les remplacement de paramètres

    Posté par  . Évalué à 3.

    Si $arg contient l'argument à tester,
    ${arg%.*}
    renvoie la chaîne $arg sans la dernière extension (ou toute la chaîne si'il n'y a pas de point)
    ${arg#*.}
    renvoie $arg en supprimant tout ce qui précède le premier point (ou toute la chaîne s'il n'y a pas de point).

    Quelque chose comme ça devrait fonctionner :

    if [ $arg != ${arg%.*}.${arg#*.} ]
    then
    echo "Mauvais argument : $arg"
    exit 1
    fi
    • [^] # Re: Bash et les remplacement de paramètres

      Posté par  . Évalué à 3.

      Si on veut autoriser les "." dans les noms de fichier (et ne considérer comme extension que ce qui est après le dernier), il vaut mieux utiliser "${foo%.*}.${foo##*.}". Perso j'utiliserais aussi des double-quotes un peu partout, en cas de nom de fichiers avec des espaces. Bref en résumé :
      if [ "${arg}" != "${arg%.*}.${arg##*.}" ]
  • # IFS et set

    Posté par  . Évalué à 1.

    Tu peux utiliser la variable IFS et la commande set :

    arg=$1
    IFS=.
    set $arg
    echo fichier : $1
    echo truc : $2
  • # Merci à tous

    Posté par  . Évalué à 2.

    Merci beaucoup !
    Votre aide m'a été très utile, j'ai pu faire ce que je voulais grâce à vos indications.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.