#!/bin/bash # Initialisation des variables pour les options programme=$(basename $0) substitut=$(echo $programme | sed 's/./ /g') version='1.2.0' modif='17/02/2022' function usage { echo "Usage : $programme -f (fichier[,fichier]*|-) [ -p programme ] [ -s sortie ] " echo " $programme -h " } function aide { cat << EOT Usage ===== $programme -f (fichier[,fichier]*|-) [ -p programme ] [ -s sortie ] $programme -h Options ======= -f indique le nom du ou des fichiers à traiter. Cette option est répétitive. Vous pouvez également utiliser une liste de fichiers séparés par des virgules (mais sans espace) ou mettre un tiret si les données sont envoyées sur l’entrée standard -h affiche cette aide -p indique où trouver le programme “decode_wos” s’il n’est pas dans un des répertoires donnés par la variable \$PATH -s indique le nom du fichier de sortie. Sinon, les données sont envoyées sur la sortie standard EOT exit 0 } function lire { local tmp=() local stdin=0 local item local deb local fin for item in $* do while [[ -n $item ]] do deb=${item%%,*} fin=${item#*,} tmp+=($deb) if [[ $deb = $fin ]] then item="" else item=$fin fi done done for fichier in ${tmp[@]} do if [[ $fichier = '-' ]] then if [[ $stdin -eq 0 ]] then cat fi stdin=1 else cat $fichier fi done } declare -a fichiers while getopts f:hp:s: i do case $i in f) fichiers+=($OPTARG);; h) aide;; p) prog=$OPTARG;; s) sortie=$OPTARG;; \?) echo " " >&2 usage >&2 echo " " >&2 exit 1;; esac done if [[ ${#fichiers[@]} -eq 0 ]] then echo "Erreur : option “-f” absente " >&2 echo " " >&2 usage >&2 echo " " >&2 exit 2 fi decode=${prog:-decode_wos} if [[ -z $sortie ]] then sortie='/dev/fd/1' fi lire ${fichiers[@]} | $decode | egrep '<REC ' | (echo '<records>'; cat; echo '</records>') | xmllint -format - > $sortie exit 0