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…