Forum Programmation.shell Allocation fichier en entrée / sortie

Posté par  .
Étiquettes : aucune
1
22
mar.
2012

Bonjour à tous les pro du KSH

Je débute dans ce langage, donc je cherche un peu (beaucoup) d'aide :pt1cable: :pt1cable:

Je dois réécrire un source.sh car on bascule d'un domaine microfocus vers un domaine IBM.

Pour cela, le sh actuel effectue des appels de fonction pour allouer des fichiers en entrée et en sortie
mais comment bypasser ces fonctions ???

Détail, allocation de fichier pour appel d'un programme cobol

En gros voici un extrait de code :

Dans mon sh appel à la fonction : f_allocfcout00 WG X8FEA8KNTB
Dans le cobol on a -
SELECT WG-FICHIER ASSIGN UT-S-WG

et la fonction f_allocfcout00 :

function f_allocfcout00 {
export filecode=$(f_calculnomf00 $2 "W" )}

puis la fonction f_calculnomf00 :

function f_calculnomf00 {

argument=$1
argument2=$2

nbz=$(echo $argument | awk ' { i=split($0,s,"/" ); print i;}') # controle path complet ou uniquement nom du fichier
if [ ${nbz} -eq 1 ]; then # argument = uniquement nom du fichier
extent=$(echo $argument | awk ' { i=split($0,s,"." ); print i;}'); # test nom fichier sans extension
if [ ${extent} -gt 1 ]; then

argument3=$(echo $argument | awk ' { i=split($0,s,"." ); print s[1];}');
else
argument3=$argument;
fi
carad=$(echo $argument3 | awk ' { lg=length($0); i=substr($0,lg-1,1); print i;}')
card=$(echo $argument3 | awk ' { lg=length($0); i=substr($0,lg-1,2); print i;}')
chemin="";
calculOK='';
if [ ${card} = 'BP' ] || [ ${card} = 'TS' ] || [ ${card} = 'TT' ] || [ ${card} = 'FV' ] || [ ${carad} = 'P' ] || [ ${carad} = 'X' ] || [ ${carad} = 'D' ] || [ ${carad} = 'I' ] || [ ${carad} = '1' ] || [ ${carad} = 'A' ]; then

chemin=$X8_FICH_PERM; calculOK=O;

if [ ${extent} -eq 1 ]; then # test generation automatique extension
if [ ${argument2} = "R" ]; then argument=${argument}".0"; else argument=${argument}".tmp"; fi
fi
elif [ ${carad} = 'E' ] || [ ${carad} = 'T' ] || [ ${carad} = 'U' ]; then chemin=$X8_FICH_TMP_SAV; calculOK='O';
elif [ ${carad} = 'V' ]; then chemin=$X8_FICH_TMP_NOSAV; calculOK='O';
elif [ ${carad} = '0' ]; then chemin=$X8_FICH_PARAM; calculOK='O';
elif [ ${carad} = 'F' ] || [ ${carad} = 'W' ] || [ ${carad} = 'Y' ]; then chemin=$X8_FICH_TRANSF; calculOK='O';
elif [ ${carad} = 'R' ]; then chemin=$X8_FICH_INT_APP_ENT; calculOK='O';
elif [ ${carad} = 'Z' ] && [ ${argument2} = "R" ]; then chemin=$X8_FICH_INT_APP_ENT; calculOK='O';

elif [ ${carad} = 'Z' ]; then chemin=$X8_FICH_INT_APP_SOR; calculOK='O';
elif [ ${carad} = 'K' ]; then chemin=$X8_FICH_ORACLE; calculOK='O';
elif [ ${carad} = 'L' ]; then chemin=$X8_SAS_UG; calculOK='O';
else chemin=""
fi

if [ "${calculOK}" = 'O' ]; then
if [ "${chemin}" != "" ]; then echo $LMDATA"/"${chemin}"/"${argument}; else echo $LMDATA"/"${argument}; fi

else
export RETCODE=1;
fi
else echo $1
fi
}

MA QUESTION :

Comment faire dans mon nouveau sh pour éviter l'appel à ces fonctions et mettre en "dur" le nom du chemin et l'allocation de mon fichier wg ??

en vous remerciant d'avance

  • # ton script ne fait rien d'autre que calculer un filecode

    Posté par  . Évalué à 3.

    le code que tu nous a mis ne fait que regarder les options qu'on lui passe
    f_allocfcout00 ne fait que recuperer dans filecode le resultat de : f_calculnomf00 $2 "W"

    f_calculnomf00, ne fait que lire les options $2 et "W"
    il fait une cuisine avec pour te sortir un chemin ou un nom de fichier.

    je vois plein de split et de awk pour calculer ca.

    je penses qu'en shell moderne un dirname $fichier ou un basename $fichier
    devrait suffire

    ensuite tu as une serie de test sur le 2e argument (E/V/0/F/R/Z/K/L) qui va determiner ou sera deposer le fichier via son chemin

Suivre le flux des commentaires

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