Problem script (pas POSX) (AIX -> HP)

Fermé
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016 - 28 juil. 2011 à 13:50
synopsis8 Messages postés 1364 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 1 juin 2013 - 28 juil. 2011 à 17:30
Bonjour,

J'ai un petit soucis de script. je viens de basculé mon script d'un AIX vers un HP et il se trouve que je n'ai pas bash mais sh sous HP donc certainne ligne de mon script coince... :-(

es ce que quelqu'un aurait l'aimabilité de pouvoir m'aider à réadapté certainnes ligne.... :-)

Dans un premier temps mon expression régulière je vérifie que la saisie de l'utilisateur respecte bien une certaine syntaxe:

Sous Aix et qui fonctionne trés bien sa donne sa:


        echo " "
        read -p '       Enter printer name : ' printName
        echo " "
        # regular expression to verify the name
        egrep -q '^[A-Z]{3}_[A-Z0-9]{1,4}_[0-9]{1,2}_[LT]_[0-9]{1,2}$' <<<${printName}
        if [ "$?" -eq 0 ]
        then
                echo ""
                read -p "       Confirm  name :  $printName  ?  <y / n> " wish
                if [ $wish = "y" ]
                then
                        flag=1
                fi
        else
                echo -e "\n\t\t!!!  ERROR: Printer name is not  format  !!!\n"
                echo -e "\t\t\tthe right form is : \n"
                
        fi


Sous HP j'ai essayé sa mais sa ne marche pas vraiment mon expression réguliere ne marche pas:

       #echo " "
        #read -p '      Enter printer name : ' printName
        #echo " "
        # regular expression to verify the name
        #egrep -q '^[A-Z]{3}_[A-Z0-9]{1,4}_[0-9]{1,2}_[LT]_[0-9]{1,2}$' <<<${printName}

        echo "\n\tEnter printer name :  "
        read printName
        b='expr match "$printName" '\(^[A-Z]{3}_[A-Z0-9]{1,4}_[0-9]{1,2}_[LT]_[0-9]{1,2}$\)''
        echo $b
        #if [ "$?" -eq 0 ]
        if [ "$printName" = "$b" ]
        then
                echo "\n\tConfirm  name :  $printName  ?  <y / n> "
                read whish
                #read -p "      Confirm  name :  $printName  ?  <y / n> " wish
                if [ $wish = "y" ]
                then
                        flag=1
                fi
        else
                echo  "\n\t\t!!!  ERROR: Printer name is not M27 format  !!!\n"
                echo  "\t\t\tthe right form is : \n"
                echo  "\t<Site code>_<Building Code>_<n° floor>_<Model Code Printer (T ou L)>_<order number>\n\n\t\t\tEXAMPLE : CAR_A_2_L_1 "
        fi


Quelqu'un aurait une petit idée svp?

Merci par avance... :-))

A voir également:

5 réponses

synopsis8 Messages postés 1364 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 1 juin 2013 243
28 juil. 2011 à 14:39
Bonjour,

Pour pouvoir t'aider plus finement, il faudrait que tu exécutes ton script en mode debug :

sh -x scriptname

ou alors
ksh -x scriptname


Ça dépend avec quel shell tu exécutes le script.
Mais de toutes façons, il est assez imprudent pour des questions de comptabilités avec certains OS de développer en bash.
0
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
28 juil. 2011 à 14:47
J'ai retenue la lecon la,j'éviterai maintenant que je vois les problème que sa peut causé.

voici le résultat

+ echo \n\tEnter printer name :

        Enter printer name :
+ read printName
ret
+ + expr match ret \(^[A-Z]{3}_[A-Z0-9]{1,4}_[0-9]{1,2}_[LT]_[0-9]{1,2}$\)
b=
+ echo

+ [ ret !=  ]
+ echo \n\tConfirm  name :  ret  ?  <y / n>

        Confirm  name :  ret  ?  <y / n>
+ read whish
n
+ [ = y ]
create_printers.sh[98]: test: argument expected
+ [ 0 -eq 0 ]
+ echo \n\tEnter printer name :

        Enter printer name :
+ read printName
TES_B2_1_L_3
+ + expr match TES_B2_1_L_3 \(^[A-Z]{3}_[A-Z0-9]{1,4}_[0-9]{1,2}_[LT]_[0-9]{1,2}$\)
b=
+ echo

+ [ TES_B2_1_L_3 !=  ]
+ echo \n\tConfirm  name :  TES_B2_1_L_3  ?  <y / n>

        Confirm  name :  TES_B2_1_L_3  ?  <y / n>
+ read whish
0
synopsis8 Messages postés 1364 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 1 juin 2013 243
28 juil. 2011 à 15:00
Tu as un problème avec la fonction test en ligne 98 de ton code.

Il manque visiblement un argument.
0
lefreeman63 Messages postés 136 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 11 février 2016
Modifié par lefreeman63 le 28/07/2011 à 15:23
Désolé petit erreur sur une variable qui n'avait rien a voir mais c'est réparer: pour retesté sa redonne sa:
Le premier nom devrait etre juste

+ echo \n\tEnter printer name : 

        Enter printer name : 
+ read printName 
TES_B2_1_L_2 
+ + expr match TES_B2_1_L_2 ^[A-Z]{3}_[A-Z0-9]{1,4}_[0-9]{1,2}_[LT]_[0-9]{1,2}$ 
b=0 
+ echo 0 
0 
+ [ TES_B2_1_L_2 != 0 ] 
+ echo \n\tConfirm  name :  TES_B2_1_L_2  ?  <y / n> 

        Confirm  name :  TES_B2_1_L_2  ?  <y / n> 
+ read wish 
n 
+ [ n = y ] 
+ [ 0 -eq 0 ] 
+ echo \n\tEnter printer name : 

        Enter printer name : 
+ read printName 
tegi"' 
+ + expr match tegi"' ^[A-Z]{3}_[A-Z0-9]{1,4}_[0-9]{1,2}_[LT]_[0-9]{1,2}$ 
b=0 
+ echo 0 
0 
+ [ tegi"' != 0 ] 
+ echo \n\tConfirm  name :  tegi"'  ?  <y / n> 

        Confirm  name :  tegi"'  ?  <y / n> 
+ read wish 
n 
+ [ n = y ] 
+ [ 0 -eq 0 ] 
+ echo \n\tEnter printer name : 

        Enter printer name : 
+ read printName 



et je me demande en faite si c'est pas mon expression réguliere qui serait fausse sous HP et qui ne ferrait pas la même chose. Parceque regarde si j'essai avec une expression régulière plus simple sa marche...

+ echo \n\tEnter printer name : 

        Enter printer name : 
+ read printName 
tes 
+ + expr match tes \([a-zA-Z0-9/-]*\) 
b=tes 
+ echo tes 
tes 
+ [ tes != tes ] 
+ echo \n\t\t!!!  ERROR: Printer name is not M27 format  !!!\n 

                !!!  ERROR: Printer name is not M27 format  !!! 

+ echo \t\t\tthe right form is : \n 
                        the right form is : 

+ echo \t<Site code>_<Building Code>_<n° floor>_<Model Code Printer (T ou L)>_<order number>\n\n\t\t\tEXAMPLE : CAR_A_2_L_1 
        <Site code>_<Building Code>_<n° floor>_<Model Code Printer (T ou L)>_<order number> 

                        EXAMPLE : CAR_A_2_L_1 
+ [ 0 -eq 0 ] 
+ echo \n\tEnter printer name : 

        Enter printer name : 
+ read printName 
'"("('"(" 
+ + expr match '"("('"(" \([a-zA-Z0-9/-]*\) 
b= 
+ echo 

+ [ '"("('"(" !=  ] 
+ echo \n\tConfirm  name :  '"("('"("  ?  <y / n> 

        Confirm  name :  '"("('"("  ?  <y / n> 
+ read wish 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
synopsis8 Messages postés 1364 Date d'inscription dimanche 15 mars 2009 Statut Membre Dernière intervention 1 juin 2013 243
28 juil. 2011 à 17:30
C'est bien possible, il semblerait qu'il ait un soucis avec les underscore
Tu as vu ça ?
0