Menu en Bash: Erreur sur echo (de quoi s'arracher les cheveux)

Bonjour,
MA CONFIG: BackTrack 3, KDE 3.5.7, Linux BT 2.6.21.5, Bash 3.1.17.
Sous cette config mon script « menu.sh » génère quelques erreurs.
www.airfirst.ch…
Voir l’output plus bas.
Comment les résoudre?

1. L’erreur sur la 1ère ligne: -bash: ./menu.sh: /bin/bash^M: bad interpreter: No such file or directory

2. Les erreur d’affichage des commandes: 03,05,06,08,11. Il semble que ça ne concerne que les chaines qui ont quelque chose après une variable !!!

3. L’erreur sur la ligne 31 (dans le bloc « case »).

4. Question à 10000 points !!!
Que pourrait être la raison (à s’arracher les cheveux ) de ceci:

  • Teste du menu1.sh, OK sans erreur.
    www.airfirst.ch…
    www.airfirst.ch…
  • Avec l’éditeur Kate, Copier tout le contenu de meni1.sh et coller dans menu.sh vide.
  • Teste de menu.sh done l’erreur: -bash: ./menu.sh: /bin/bash^M: bad interpreter: No such file or directory

Qui puis-je maudire: Linux, Bash ou … ???

Merci

STEP_A

bt Desktop # menu.sh
-bash: ./menu.sh: /bin/bash^M: bad interpreter: No such file or directory


STEP_B: I remove the 1st line

bt Desktop # menu.sh
: command not found
: command not found
./menu.sh: line 13: menu: command not found

********************* TEST MENU
INIT
 01  ls
 02  dir eth1
 -alldir eth1
 04  iwlist eth1
 scaniwlist eth1
 mode monitor eth1
 07  echo start eth1
 up hw ether 50:41:32:23:14:05
MAIN
 09  Set ESSID: []
 10  Set BSSID: []
 eth1echo --write file
 12  echo --test -e  -a  eth1
Choix? 01
': not a valid identifier `com
'/menu.sh: line 31: syntax error near unexpected token `in
'/menu.sh: line 31: `  case "$com" in

STEP_C: I replaced « $CN1 » by its value « eth1 » for commands 03,05,06,08,11.

bt Desktop # menu.sh
: command not found
: command not found
./menu.sh: line 13: menu: command not found

********************* TEST MENU
INIT
 01  ls
 02  dir eth1
 03  dir eth1 -all
 04  iwlist eth1
 05  iwlist eth1 scan
 06  iwconfig eth1 mode monitor
 07  echo start eth1
 08  ifconfig eth1 up hw ether 50:41:32:23:14:05
MAIN
 09  Set ESSID: []
 10  Set BSSID: []
 eth1echo --write file
 12  echo --test -e  -a  eth1
Choix? 01
': not a valid identifier `com
'/menu.sh: line 31: syntax error near unexpected token `in
'/menu.sh: line 31: `  case "$com" in
  • menu.sh
#!/bin/bash

#------------------------------------------------------------------------------------ Initialisation
DFN=file
CN1=eth1
CN2=rausb0
RTAP0=rtap0
MESSID=IPW22
FIP_100=192.168.1.100
FIP_101=192.168.1.101
MAC=50:41:32:23:14:05
#----------------------------------------------------------------------------------------- Functions
menu {
  echo 
  echo "********************* TEST MENU"
  echo "INIT"
    com01="ls"                                              ; echo " 01  $com01"
    com02="dir $CN1"                                        ; echo " 02  $com02"
    com03="dir $CN1 -all"                                   ; echo " 03  $com03"
    com04="iwlist $CN1"                                     ; echo " 04  $com04"
    com05="iwlist $CN1 scan"                                ; echo " 05  $com05"
    com06="iwconfig $CN1 mode monitor"                      ; echo " 06  $com06"
    com07="echo start $CN1"                                 ; echo " 07  $com07"
    com08="ifconfig $CN1 up hw ether $MAC"                  ; echo " 08  $com08"
  echo "MAIN"
    com09="Set ESSID: [$ESSID]"                             ; echo " 09  $com09"
    com10="Set BSSID: [$BSSID]"                             ; echo " 10  $com10"
    com11="echo --write $DFN $CN1"                          ; echo " 11  $com11"
    com12="echo --test -e $ESSID -a $BSSID $CN1"            ; echo " 12  $com12"
  read -p "Choix? " com
  case "$com" in
    01) eval "$com01";;
    02) eval "$com02";;
    03) eval "$com03";;
    04) eval "$com04";;
    05) eval "$com05";;
    06) eval "$com06";;
    07) eval "$com07";;
    08) eval "$com08";;
    09) read -p "ESSID ? " ESSID;;
    10) read -p "BSSID ? " BSSID;;
    11) eval "$com11";;
    12) eval "$com12";;
    * ) echo "BYE ...."; exit;;
  esac
}
#---------------------------------------------------------------------------------------------- BODY
while true; do menu
done
exit
#---------------------------------------------------------------------------------------------------

Edité le 04/09/2008 à 20:50

Edite ton fichier en hexa et regarde la terminaison de tes lignes
le ^M fait penser à une terminaison de type 0D0A (Dos) et non 0A (Linux)

si gcc a raison, il faut que tu convertisses ton fichier pour le rendre ‹ unix compliant ›.
j’ai eu ce problème au taff, pour le résoudre, j’ai utilisé un programme nommé dos2unix : www.freedownloadscenter.com…

Si je me rappelle bien, dans Kate il y a une option pour dire quel type de fichier on veut obtenir.
Ca doit être dans Outils

Problème(s) fixé(s) avec la commande dos2unix , merci à tous.

dos2unix menu.sh

www.commentcamarche.net…