OVH Cloud OVH Cloud

[zsh] chercher une erreur

11 réponses
Avatar
Rakotomandimby
Bonjour j'ai le script zsh suivant , dont j'ai fait des exemples simples
avant de faire ce script compliqué , et voila que quand je tente de
l'executer , j'ai l'erreur

./playlist2.sh:68: parse error near `\n'

Ce qui correspond plus ou moins au cas * ) du "case ... esac ."

Le souci c'est que je ne vois pas ce qui cloche et en inserant des saut de
lignes pour voir si il detecte l'erreur quelques lignes plus bas ( si je
descend ce " *) " de 3 lignes , l'erreur devrait etre detectée en ligne
71 ) il detecte toujours l'erreur a la ligne 68 .

Comment faire ?
Merci d'avance .

=========================================================================
#!/bin/zsh
# files containing numbers
LAST_LINE_HIRAMASINA_FILE=/tmp/last_line_hiramasina
LAST_LINE_PROFANE_FILE=/tmp/last_line_profane
PLAYED_HIRAMASINA_FILE=/tmp/played_hiramasina

# files that are randomized playlist
LIST_PROFANE=/home/audio/music/playlist_ogg.pls
LIST_HIRAMASINA=/home/audio/music/jaim/playlist_jaim.m3u

# the predication file
PREDICATION=/home/audio/music/predication.ogg

#max lines for further programming ( not yet implemented )
LIST_PROFANE_LINES=`wc -l /home/audio/music/playlist_ogg.pls | awk '{print
$1}'`
LIST_HIRAMASINA_LINES=`wc -l /home/audio/music/jaim/playlist_jaim.m3u | awk
'{print $1}'`

LL_PROFANE=`awk '{print $1}' $LAST_LINE_PROFANE_FILE`
LL_HM=`awk '{print $1}' $LAST_LINE_HIRAMASINA_FILE`
PLAYED_HIRAMASINA=`awk '{print $1}' $PLAYED_HIRAMASINA_FILE`
LERA_MASINA=`awk '{print $1}' /tmp/lera_masina`


if (( LERA_MASINA == 1 )) then

#To play 3 hiramasina

#Read what is the rank to play
#into a file , an increment it
#after playing it
PLAYED_HIRAMASINA=`awk '{print $1}' $PLAYED_HIRAMASINA_FILE`
case $(( PLAYED_HIRAMASINA % 6 )) in

1 | 2 ) 
{ sed -n ${LL_HM}p $LIST_HIRAMASINA ;
((LL_HM += 1)) ;
print $LL_HM > $LAST_LINE_HIRAMASINA_FILE ;
((PLAYED_HIRAMASINA +=1)) ;
print $PLAYED_HIRAMASINA > $PLAYED_HIRAMASINA_FILE;
};;

3 )
{
print $PREDICADTION ;
((PLAYED_HIRAMASINA +=1)) ;
print $PLAYED_HIRAMASINA > $PLAYED_HIRAMASINA_FILE ;
} ;;

4 ) 
{ sed -n ${LL_HM}p $LIST_HIRAMASINA ;
((LL_HM += 1)) ;
print $LL_HM > $LAST_LINE_HIRAMASINA_FILE ;
((PLAYED_HIRAMASINA +=1)) ;
print $PLAYED_HIRAMASINA > $PLAYED_HIRAMASINA_FILE;
};;

5 )
{
sed -n ${LL_HM}p $LIST_HIRAMASINA ;
((LL_HM += 1)) ;
print $LL_HM > $LAST_LINE_HIRAMASINA_FILE ;
((PLAYED_HIRAMASINA +=1)) ;
print $PLAYED_HIRAMASINA > $PLAYED_HIRAMASINA_FILE;
print 0 > /tmp/lera_masina ;
};;
 
* ) 
{
sed -n ${LL_HM}p $LIST_HIRAMASINA ;
print 0 > /tmp/lera-masina ;
} ;;

esac
else
sed -n ${LL_PROFANE}p $LIST_PROFANE
((LL_PROFANE += 1))
echo $LL > $LAST_LINE_PROFANE_FILE
fi

1 réponse

1 2
Avatar
Stephane Chazelas
2004-01-19, 07:48(+01), Rakotomandimby:
[...]
ou alors l'espace insecable a une signification particuliere ? plus que
l'espace tout court ?


Il n'a aucune signification particulière (pas plus
que 'é' ou 'a'). Simplement,

case a in (a)<nbsp> echo a;; esac
Tout comme:
case a in (a)a echo a;; esac

est une erreur car il faut un blanc après ")".

case a in (a) <nbsp> echo a;; done

n'aurait pas été une erreur; seulement, zsh aurait essayé de
lancer la commande <nbsp> et ne l'aurait probablement pas
trouvée.

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

1 2