2011-03-31 5 views
0

J'essaie de créer un script shell qui prend des arguments, puis exécute l'équation mathématique appropriée en fonction de la deuxième variable. Je reçois « erreur de syntaxe près de jeton inattendu` dans » et « cas « $ y » dans »Problème du scénario de script Shell

#!/bin/sh 
echo "Variable name \$1 $1" 
echo "Variable name \$2 $2" 
echo "Variable name \$3 $3" 
y=$2 
echo $y 
case $y in 
    '+') x=`expr $1 + $3` 
      echo $x 
      ;; 
    '-') x=`expr $1 - $3` 
      echo $x 
      ;; 
    '\*') x=`expr $1 \* $3` 
      echo $x 
      ;; 
    '/') x=`expr $1/$3` 
      echo $x 
      ;; 
    '%') x=`expr $1 % $3` 
      echo $x 
      ;; 
    '*') echo "Invalid option" 
      exit 1 
      ;; 
esac 

Répondre

0

essayer.

#!/bin/sh 
echo "Variable name \$1 $1" 
echo "Variable name \$2 $2" 
echo "Variable name \$3 $3" 
y=$2 
echo $y 
case $y in 
'+') x=`expr $1 + $3`; echo $x 
;; 
'-') x=`expr $1 - $3`; echo $x 
;; 
'\*') x=`expr $1 * $3`; echo $x 
;; 
'/') x=`expr $1/$3`; echo $x 
;; 
'%') x=`expr $1 % $3`; echo $x 
;; 
*) echo "Invalid option" 
exit 1 
;; 
esac 

Quelques conseils: (1) '*' * doivent être à la fin de cas struct. * signifie tous les autres cas, tandis que '*' signifie juste *. (2) x = expr $ 1 + $ 3 devrait être x = `expr $ 1 + $ 3`,` `(la touche de retour) signifie exécuter une commande dans le sous-shell et assigner la sortie à x. (3) pour avoir plusieurs commandes dans une ligne, ';' Devrait être utilisé. x = `expr $ 1% $ 3`; echo $ x

+0

J'ai essayé tous ces changements et je reçois toujours les mêmes erreurs. Il agit comme une erreur au début de l'instruction. – Rumel

+0

@Rurnel, je pense que vous devriez vérifier quel shell est utilisé. Comme votre bang est #!/Bin/sh, tapez 'ls -l \' qui sh \ '' et vérifiez la sortie. _Bash_, _dash_ et _sh_ devraient être des résultats acceptables. [Ici] (http://www.grymoire.com/Unix/Sh.html#uh-82) est un tutoriel sur la structure de cas dans shell. Collez simplement un exemple à votre shell et vérifiez s'il y a quelque chose qui ne va pas. BTW, la sortie d'erreur complète aiderait à identifier le problème. – tianyapiaozi

+0

1rwxrwxrwx 1 racine racine 9 2011-01-02 01:09/usr/bin/sh ->/bin/bash – Rumel

-1

Si vous utilisez bash, modifiez votre tralala à #!/bin/bash

0

La dernière clause de cas devrait être

*) echo "Invalid option" 

-à-dire pas enlever '*'

+0

J'ai fait tous ces changements maintenant mais le problème persiste – Rumel