KSH boucle for et paramètres

Résolu
fabien.joubert Messages postés 35 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour

j'ai un fichier . KSH qui admait jusqu'à 4 paramètres.
Mais j'ai 4 case absolument identique ce qui me donne un code très lourd
Ne pourrais je pas raccourcir mon code avec une boucle for?
Merci d'avance a tous ceux qui me répondront
Voici le code initial sur lequel je travail.

param1=$1
param2=$2
param3=$3
param4=$4

p1=$(echo $param1 | cut -f1 -d"=")
p2=$(echo $param2 | cut -f1 -d"=")
p3=$(echo $param3 | cut -f1 -d"=")
p4=$(echo $param4 | cut -f1 -d"=")

case $p1 in
CB) basicat=$(echo $param1 | cut -f2 -d"=");;
CodeBasicat) basicat=$(echo $param1 | cut -f2 -d"=");;
code) basicat=$(echo $param1 | cut -f2 -d"=");;
code_appli) basicat=$(echo $param1 | cut -f2 -d"=");;
email) mail=$(echo $param1 | cut -f2 -d"=");;
e-mail) mail=$(echo $param1 | cut -f2 -d"=");;
mail) mail=$(echo $param1 | cut -f2 -d"=");;
em) mail=$(echo $param1 | cut -f2 -d"=");;
TypServ) serv=$(echo $param1 | cut -f2 -d"=");;
TypeServeur) serv=$(echo $param1 | cut -f2 -d"=");;
Type_de_Serveur) serv=$(echo $param1 | cut -f2 -d"=");;
TypedeServeur) serv=$(echo $param1 | cut -f2 -d"=");;
TS) serv=$(echo $param1 | cut -f2 -d"=");;
typeserveur) serv=$(echo $param1 | cut -f2 -d"=");;
typserv) serv=$(echo $param1 | cut -f2 -d"=");;
type_de_serveur) serv=$(echo $param1 | cut -f2 -d"=");;
typedeserveur) serv=$(echo $param1 | cut -f2 -d"=");;
ts) serv=$(echo $param1 | cut -f2 -d"=");;
TypTach) tach=$(echo $param1 | cut -f2 -d"=");;
TypeTache) tach=$(echo $param1 | cut -f2 -d"=");;
Type_de_Tache) tach=$(echo $param1 | cut -f2 -d"=");;
TypedeTache) tach=$(echo $param1 | cut -f2 -d"=");;
TT) tach=$(echo $param1 | cut -f2 -d"=");;
typtach) tach=$(echo $param1 | cut -f2 -d"=");;
typetache) tach=$(echo $param1 | cut -f2 -d"=");;
type_de_tache) tach=$(echo $param1 | cut -f2 -d"=");;
typedetache) tach=$(echo $param1 | cut -f2 -d"=");;
tt) tach=$(echo $param1 | cut -f2 -d"=")
esac

case $p2 in
CB) basicat=$(echo $param2 | cut -f2 -d"=");;
CodeBasicat) basicat=$(echo $param2 | cut -f2 -d"=");;
code) basicat=$(echo $param2 | cut -f2 -d"=");;
code_appli) basicat=$(echo $param2 | cut -f2 -d"=");;
email) mail=$(echo $param2 | cut -f2 -d"=");;
e-mail) mail=$(echo $param2 | cut -f2 -d"=");;
mail) mail=$(echo $param2 | cut -f2 -d"=");;
em) mail=$(echo $param2 | cut -f2 -d"=");;
TypServ) serv=$(echo $param2 | cut -f2 -d"=");;
TypeServeur) serv=$(echo $param2 | cut -f2 -d"=");;
Type_de_Serveur) serv=$(echo $param2 | cut -f2 -d"=");;
TypedeServeur) serv=$(echo $param2 | cut -f2 -d"=");;
TS) serv=$(echo $param2 | cut -f2 -d"=");;
typeserveur) serv=$(echo $param2 | cut -f2 -d"=");;
typserv) serv=$(echo $param2 | cut -f2 -d"=");;
type_de_serveur) serv=$(echo $param2 | cut -f2 -d"=");;
typedeserveur) serv=$(echo $param2 | cut -f2 -d"=");;
ts) serv=$(echo $param2 | cut -f2 -d"=");;
TypTach) tach=$(echo $param2 | cut -f2 -d"=");;
TypeTache) tach=$(echo $param2 | cut -f2 -d"=");;
Type_de_Tache) tach=$(echo $param2 | cut -f2 -d"=");;
TypedeTache) tach=$(echo $param2 | cut -f2 -d"=");;
TT) tach=$(echo $param2 | cut -f2 -d"=");;
typtach) tach=$(echo $param2 | cut -f2 -d"=");;
typetache) tach=$(echo $param2 | cut -f2 -d"=");;
type_de_tache) tach=$(echo $param2 | cut -f2 -d"=");;
typedetache) tach=$(echo $param2 | cut -f2 -d"=");;
tt) tach=$(echo $param2 | cut -f2 -d"=")
esac

case $p3 in
CB) basicat=$(echo $param3 | cut -f2 -d"=");;
CodeBasicat) basicat=$(echo $param3 | cut -f2 -d"=");;
code) basicat=$(echo $param3 | cut -f2 -d"=");;
code_appli) basicat=$(echo $param3 | cut -f2 -d"=");;
email) mail=$(echo $param3 | cut -f2 -d"=");;
e-mail) mail=$(echo $param3 | cut -f2 -d"=");;
mail) mail=$(echo $param3 | cut -f2 -d"=");;
em) mail=$(echo $param3 | cut -f2 -d"=");;
TypServ) serv=$(echo $param3 | cut -f2 -d"=");;
TypeServeur) serv=$(echo $param3 | cut -f2 -d"=");;
Type_de_Serveur) serv=$(echo $param3 | cut -f2 -d"=");;
TypedeServeur) serv=$(echo $param3 | cut -f2 -d"=");;
TS) serv=$(echo $param3 | cut -f2 -d"=");;
typeserveur) serv=$(echo $param3 | cut -f2 -d"=");;
typserv) serv=$(echo $param3 | cut -f2 -d"=");;
type_de_serveur) serv=$(echo $param3 | cut -f2 -d"=");;
typedeserveur) serv=$(echo $param3 | cut -f2 -d"=");;
ts) serv=$(echo $param3 | cut -f2 -d"=");;
TypTach) tach=$(echo $param3 | cut -f2 -d"=");;
TypeTache) tach=$(echo $param3 | cut -f2 -d"=");;
Type_de_Tache) tach=$(echo $param3 | cut -f2 -d"=");;
TypedeTache) tach=$(echo $param3 | cut -f2 -d"=");;
TT) tach=$(echo $param3 | cut -f2 -d"=");;
typtach) tach=$(echo $param3 | cut -f2 -d"=");;
typetache) tach=$(echo $param3 | cut -f2 -d"=");;
type_de_tache) tach=$(echo $param3 | cut -f2 -d"=");;
typedetache) tach=$(echo $param3 | cut -f2 -d"=");;
tt) tach=$(echo $param3 | cut -f2 -d"=")
esac

case $p4 in
CB) basicat=$(echo $param4 | cut -f2 -d"=");;
CodeBasicat) basicat=$(echo $param4 | cut -f2 -d"=");;
code) basicat=$(echo $param4 | cut -f2 -d"=");;
code_appli) basicat=$(echo $param4 | cut -f2 -d"=");;
email) mail=$(echo $param4 | cut -f2 -d"=");;
e-mail) mail=$(echo $param4 | cut -f2 -d"=");;
mail) mail=$(echo $param4 | cut -f2 -d"=");;
em) mail=$(echo $param4 | cut -f2 -d"=");;
TypServ) serv=$(echo $param4 | cut -f2 -d"=");;
TypeServeur) serv=$(echo $param4 | cut -f2 -d"=");;
Type_de_Serveur) serv=$(echo $param4 | cut -f2 -d"=");;
TypedeServeur) serv=$(echo $param4 | cut -f2 -d"=");;
TS) serv=$(echo $param4 | cut -f2 -d"=");;
typeserveur) serv=$(echo $param4 | cut -f2 -d"=");;
typserv) serv=$(echo $param4 | cut -f2 -d"=");;
type_de_serveur) serv=$(echo $param4 | cut -f2 -d"=");;
typedeserveur) serv=$(echo $param4 | cut -f2 -d"=");;
ts) serv=$(echo $param4 | cut -f2 -d"=");;
TypTach) tach=$(echo $param4 | cut -f2 -d"=");;
TypeTache) tach=$(echo $param4 | cut -f2 -d"=");;
Type_de_Tache) tach=$(echo $param4 | cut -f2 -d"=");;
TypedeTache) tach=$(echo $param4 | cut -f2 -d"=");;
TT) tach=$(echo $param4 | cut -f2 -d"=");;
typtach) tach=$(echo $param4 | cut -f2 -d"=");;
typetache) tach=$(echo $param4 | cut -f2 -d"=");;
type_de_tache) tach=$(echo $param4 | cut -f2 -d"=");;
typedetache) tach=$(echo $param4 | cut -f2 -d"=");;
tt) tach=$(echo $param4 | cut -f2 -d"=")
esac
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. jee pee Messages postés 31879 Date d'inscription   Statut Modérateur Dernière intervention   9 978
     
    bonjour,

    cherche autour de :
    for i in $1 $2 $3 $4
    do
        p=$(echo $i | cut -f1 -d"=")
        case $p in
           CB) basicat=$(echo $i | cut -f2 -d"=");; 
           ...
           ...
        esac
    done
    

    cdt
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Dans le même esprit que "jee pee" :
    $ cat foo.ksh
    
    #! /bin/ksh
    
    for param in "$@"
    do
    case $param in
    1)      echo "Le paramètre $param contient le chiffre 1"
            ;;
    2)      echo "Le paramètre $param contient le chiffre 2"
            ;;
    5)      echo "Le paramètre $param contient le chiffre 5"
            ;;
    *)      echo "Le paramètre $param ne fait pas parti de la liste..."
            ;;
    esac
    done
    
    $ ./foo.ksh 3 5 2 7 1 0
    
    Le paramètre 3 ne fait pas parti de la liste...
    Le paramètre 5 contient le chiffre 5
    Le paramètre 2 contient le chiffre 2
    Le paramètre 7 ne fait pas parti de la liste...
    Le paramètre 1 contient le chiffre 1
    Le paramètre 0 ne fait pas parti de la liste...
    
    $ 
    ;-))
    0
  3. fabien.joubert Messages postés 35 Statut Membre 14
     
    Merci beaucoup a vous 2
    cette solution fonctionne très bien

    for i in $1 $2 $3 $4
    do
    p=$(echo $i | cut -f1 -d"=")
    case $p in
    CB) basicat=$(echo $i | cut -f2 -d"=");;
    ...
    ...
    esac
    done

    C'est la deuxième fois que je viens sur le forum de ccm est je suis trétré content de l'efficacité
    merci bcp. bye
    0
  4. jee pee Messages postés 31879 Date d'inscription   Statut Modérateur Dernière intervention   9 978
     
    En plus, tu peux simplifier les cases :
     CB) basicat=$(echo $param1 | cut -f2 -d"=");;
     CodeBasicat) basicat=$(echo $param1 | cut -f2 -d"=");;
     code) basicat=$(echo $param1 | cut -f2 -d"=");; 
    
    c'est plus court en mettant
    
     CB|CodeBasicat|code) basicat=$(echo $param1 | cut -f2 -d"=");;
    
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Et encore plus court si tu te sers de l'expansion des paramètres :
    B|CodeBasicat|code) basicat=${param1#*=}
    et aussi :
    p1=${param1%=*}
    ;-))
    0