Problème script

Étienne9 Messages postés 1090 Statut Membre -  
 Utilisateur anonyme -
Bonjour à tous,

Encore une fois j'ai besoin de votre aidre sur un code en sh.
Voilà mon code, il ne fonctionne pas et je voulais savoir pourquoi. Merci beaucoup d'avance.

#!/bin/sh
touch my-ball.sh
cat > my-ball.sh << EOF
i=$#
if [ $i -eq 0 ]
then
fichier="my-id.txt"
i="1"
else
fichier="$1"
fi
while [ $i -ne 0 ]
do
cat > $fichier << FINID
Titi
Toto
Tutu
FINID
i='expr $i - 1'
shift
if [ $i != -ne 0 ]
then
fichier="$1"
fi
done
EOF
chmod u+x my-ball.sh
#./my-ball.sh

5 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    if [ $i != -ne 0 ]

    C'est ou l'un ou l'autre, mais pas les deux ensemble ;-((

    0
  2. Utilisateur anonyme
     
    il ne fonctionne pas
    par rapport à quoi ?
    ce script est censé faire quoi?

    les variables du premier here-doc doivent apparaître en dur dans le script my-ball.sh, ou doivent-elles rester des variables?
    0
  3. Étienne9 Messages postés 1090 Statut Membre 49
     
    Le problème est expr apparemment...
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Merci de bien vouloir répondre aux questions posées par qqchquicommenceparQ !
      0
  4. Étienne9 Messages postés 1090 Statut Membre 49
     
    par rapport à quoi ?
    - à l'exécution il marque qu'il y a un problème avec EXPR et quand on regarde plus en détail, mon expr $i - 1 devient en fait expr -1
    ce script est censé faire quoi?
    - C'est un script create-my-ball qui prend en paramètres des noms de fichiers et qui crée un fichier my-ball et qui l'exécute et qui my-ball est sensé créer les fichiers qui étaient en paramètre avec mon nom, mon prénom etc mais j'ai changé sur le forum en Titi Toto Tutu
    les variables du premier here-doc doivent apparaître en dur dans le script my-ball.sh, ou doivent-elles rester des variables?
    - je ne comprends pas trop la question... à mon avis avec le "censé faire quoi" ça devrait aller.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Tel quel, le here-doc va développer les variables qui s'y trouvent.
    C'est à dire que
    i=$#
    va être développé en
    i=4
    si le script principal (create-my-ball) possède 4 arguments.
    De la même manière,
    $fichier
    va être développé en rien, car le test sur son existence, et donc une éventuelle assignation par défaut n'a pas non plus eu lieu.
    Pour éviter cela, met EOF entre apostrophes :
    cat >my-ball.sh <<'EOF'


    Je ne vois pas trop d'intérêt à écrire un script qui écrit un autre script, si le premier ne fait pas au moins quelques tests, qui n'ont alors plus de raison d'être dans le second.

    Quant à
    expr
    , c'est une commande externe qui n'a aucune utilité pour un shell compatible POSIX.
    il existe une commande interne
    let
    , qui n'est pas très utile, puisque le shell sait effectuer des calculs entre $(( )).
    0