Pages : 1
#1 Le 19/03/2008, à 11:17
- KujakuChan
Fonctions avec Ubuntu
Bonjour,
j'aimerai savoir pourquoi mon script marche impec sous debian et fait n'importequoi sur ubuntu ?
Quelles sont les solutions ?
Je vous passe mon code ici
#!/bin/sh
#===============================================#
# Nom du fichier : sfdiskgui.sh #
# Description : Front-end basé sur sfdisk #
# Auteur : Eminomeneko #
# Date : 2008 #
# #
# Le script est un GUI utilisant sfdisk #
# permettant de manipuler la table des parti- #
# tions. #
#===============================================#
#===============================================#
# VARIABLES #
#===============================================#
# Création du fichier qui contiendra les choix de menu
# et mise du chemin dans une variable (simplicité et clareté du code)
touch /tmp/sfdiskgui && temp=/tmp/sfdiskgui
Titre="Outils de partitionnement de disque."
#===============================================#
# FONCTIONS #
#===============================================#
#===============================================#
# FONCTIONS DU MENU PRINCIPAL #
#===============================================#
function main_loop
{
dialog --clear --backtitle "$Titre" --title "Menu" \
--menu "Quelle action entreprendre ?" 20 80 5 \
"Creer" "Crée une nouvelle partition."\
"Modifier" "Modifie une partition."\
"Voir" "Affiche les information d'une partition."\
"Dump" "Dumper la table des partitions."\
"Quitter" "Quitte le programme." 2> $temp
choix=`cat $temp`
if [ $? = 0 ]
then
for i in `cat $temp`
do
case $i in
# Continuer est par défaut
# NB : les fonctions doivent être créés avant l'appel à celle-ci
# c'est pourquoi ils seront définis en début de fichier après les
# variables.
Creer)
main_creer;;
Modifier)
main_modif;;
Voir)
main_voir;;
Dump)
main_dump;;
Quitter)
dialog --msgbox "Fin du programme." 10 50
exit 0;;
esac
done
fi
}
function main_creer
{
dialog --backtitle "$Titre" --inputbox "Bloque de début de la partition" 10 50
dialog --backtitle "$Titre" --inputbox "Taile de la partition" 10 50
dialog --backtitle "$Titre" --inputbox "Type de partition" 10 20
main_loop
}
function main_modif
{
dialog --clear --backtitle "$Titre" \
--msgbox "Modifie une partition" 10 50
main_loop
}
function main_voir
{
dialog --clear --backtitle "$Titre" \
--msgbox "Voir les infos d'une partition" 10 50
main_loop
}
function main_dump
{
dialog --clear --backtitle "$Titre" --title "Dump de la Table des partition"\
--checklist "Choisissez les partitons" 10 50 5\
"ide1" "hda1" on \
"ide2" "hda2" off \
"ide3" "hda3" off \
"ide4" "hda4" off \
"sata1" "sda1" off \
"sata2" "sda2" off \
"sata3" "sda3" off \
"sata4" "sda4" off 2>$temp
for choix in `cat $temp`
do
# TODO A remplacer par l'action à effectuer
# Sauvegarde des tables de partitions choisies
dialog --clear --backtitle "$Titre" \
--msgbox "$choix" 10 10
done
main_loop
}
#===============================================#
# DIALOGUES #
#===============================================#
main_loop
Il n'y a pour l'instant qu'un début de squelette mais le problème c'est que malgré le mot clé function les fonctions sont exécutées les unes après les autres et si je laisse les parenthèses j'ai le droit à ce message...
prompt:~$ ./sfdiskgui.sh
./sfdiskgui.sh: 31: Syntax error: "(" unexpected
A noter que sous Debian j'ai mis des parenthèses lors de la déclaration de mes fonctions et que ça passe.
A noter aussi que ce script sera utilisé sur un Live CD probablement créé à partir du System Rescue CD. (il semble que ça sera une gentoo donc d'après ce qu'on m'a dit)
Merci
自分の考え:ウィンドウズがライナックスに対するのはデルフィがC++に対するようなものである。
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.
Hors ligne
#2 Le 19/03/2008, à 11:37
- SnakemaN
Re : Fonctions avec Ubuntu
Vérifie vers ou pointe /bin/sh, si ca se trouve c'est pas le même shell
ps: elle est ou la ligne 31 ? " dialog --clear --backtitle "$Titre" --title "Menu" \ " ?
ps 2 : a priori c'est du ksh, vérifie le pointage de /bin/sh, par défaut ca pointe vers /bin/bash, change la première ligne en #!/bin/ksh
Dernière modification par SnakemaN (Le 19/03/2008, à 11:44)
"Bon chat n'a besoin de beau collier d'or "
Membre du Groupe des Parrains Linux
Hors ligne
#3 Le 19/03/2008, à 12:48
- KujakuChan
Re : Fonctions avec Ubuntu
Euh non c'est bien du sh Ksh je connais pas
la ligne 31 je c'est la
function main_loop
dès qu'on met une parenthèse ça ne passe plus... xD et ça m'affiche ce fameux message.
ne confond pas c'est juste dialog qui a une syntaxe bien à elle parce qu'elle doit créer des boites de dialogue curse en fonction d'une syntaxe qui lui est propre. Je confirme encore une fois c'est bien du sh : le seul type de script que j'ai appris.
Dernière modification par KujakuChan (Le 19/03/2008, à 12:50)
自分の考え:ウィンドウズがライナックスに対するのはデルフィがC++に対するようなものである。
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.
Hors ligne
#4 Le 19/03/2008, à 15:03
- SnakemaN
Re : Fonctions avec Ubuntu
Non non, le "sh" ca n'existe pas, c'est format de ton fichier
Par contre au niveau des shells on a par exemple :
le bsh (Bourne Shell)
le bash (Bourne Against Shell) <- le plus courant
le ksh (Korn Shell)
le zsh
....
A savoir que ton script est du ksh, je le vois a cause de
Creer)
main_creer;;
et a ta déclaration de fonction :
function nom_fonc
{
commandes
}
alors qu'en bash (Bourn Again Shell) on fera
nom_fonc ()
{
commandes
}
Maintenant, souvent on met #!/bin/sh pour renvoyer vers le shell par défaut de l'utilisateur qui lance le script !
Un script commençant pas #!/bin/sh doit être l'interprété par tous les shells (en théorie!). Mais apparemment pas pour toi.
Par défaut ubuntu met le shell par défaut en bash, d'ou ton problème.
Donc pour savoir quel est le shell par défaut soi tu va voir dans ton profil d'utilisateur, soit tu fait :
$ type /bin/sh
Dernière modification par SnakemaN (Le 19/03/2008, à 15:03)
"Bon chat n'a besoin de beau collier d'or "
Membre du Groupe des Parrains Linux
Hors ligne
#5 Le 19/03/2008, à 16:35
- valAa
Re : Fonctions avec Ubuntu
Salut,
Sous ubuntu depuis Edgy, le shell par défaut est dash (et plus bash).
Dernière modification par valAa (Le 19/03/2008, à 16:35)
Hors ligne
#6 Le 19/03/2008, à 17:50
- KujakuChan
Re : Fonctions avec Ubuntu
Ah bon ?!? Je fais du Korn shell sans le savoir ?
OK /bin/sh/ est un lien symbolique ?
En tout cas merci pour les informations que vous m'avez passés. Je ne suis pas souvent sur le PC qui pose "problème" en attendant je vais développer sous ma Debian chez moi.
Je viens de vérifier, Sytem Rescue CD est bien basée sur Gentoo. Je devrais peut-être essayer de développer sous Gentoo (en plus je l'ai jamais essayé : c'est l'occasion )
Je vais aussi essayer de remettre en bash dans ce cas. Peut-être que ça va aider.
自分の考え:ウィンドウズがライナックスに対するのはデルフィがC++に対するようなものである。
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.
Hors ligne
#7 Le 20/03/2008, à 09:35
- SnakemaN
Re : Fonctions avec Ubuntu
Salut,
Sous ubuntu depuis Edgy, le shell par défaut est dash (et plus bash).
'tiiinnn vj'viens de la comprendre .... dash le shell 2 en 1, adoucissant et senteur printanière c'est ça ?:lol:
"Bon chat n'a besoin de beau collier d'or "
Membre du Groupe des Parrains Linux
Hors ligne
#8 Le 20/03/2008, à 11:17
- valAa
Re : Fonctions avec Ubuntu
valAa a écrit :Salut,
Sous ubuntu depuis Edgy, le shell par défaut est dash (et plus bash).'tiiinnn vj'viens de la comprendre
.... dash le shell 2 en 1, adoucissant et senteur printanière c'est ça ?:lol:
Ah bé il y a peut-être un sens caché comme tu le dis, mais si c'est le cas ce n'est pas moi l'inventeur de la blague :
http://forum.ubuntu-fr.org/viewtopic.php?id=80697
C'est tout ce qu'il y a de plus sérieux en fait
d'ailleurs chez moi :
ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2007-07-23 16:02 /bin/sh -> dash
Enfin on dérive vers le HS là... [edit] quoique... le problème vient peut-être de là...
Dernière modification par valAa (Le 20/03/2008, à 11:22)
Hors ligne
#9 Le 20/03/2008, à 11:41
- SnakemaN
Re : Fonctions avec Ubuntu
Salut,
Sous ubuntu depuis Edgy, le shell par défaut est dash (et plus bash).
Oui mais pas celui de l'utilisateur, la c'est lui, tout seul comme un grand qui lance le script avec son shell par défaut en bash.
Merci pour le lien valAa
"Bon chat n'a besoin de beau collier d'or "
Membre du Groupe des Parrains Linux
Hors ligne
#10 Le 20/03/2008, à 14:51
- kaer
Re : Fonctions avec Ubuntu
dash est essentiellement un bash allégé pour démarer plus vite.
On a surtout enlevé ce qui est utile interactivement.
On peut toujours dans les trés rares cas ou il y a une différence de comportement avec bash, faire pointer son script vers bash et non sh.
Hors ligne
#11 Le 20/03/2008, à 19:27
- KujakuChan
Re : Fonctions avec Ubuntu
SnakemaN a écrit :valAa a écrit :Salut,
Sous ubuntu depuis Edgy, le shell par défaut est dash (et plus bash).'tiiinnn vj'viens de la comprendre
.... dash le shell 2 en 1, adoucissant et senteur printanière c'est ça ?:lol:
Ah bé il y a peut-être un sens caché comme tu le dis, mais si c'est le cas ce n'est pas moi l'inventeur de la blague :
http://forum.ubuntu-fr.org/viewtopic.php?id=80697
C'est tout ce qu'il y a de plus sérieux en faitd'ailleurs chez moi :
ls -l /bin/sh lrwxrwxrwx 1 root root 4 2007-07-23 16:02 /bin/sh -> dash
Enfin on dérive vers le HS là... [edit] quoique... le problème vient peut-être de là...
Et là sur ton lien je cite Cathou sous son premier code :
"Typique: une définition de fonction ne se rédige pas de la même manière en bash qu'en sh".
Il se peut bien que ça soit une erreur mais c'est dans l'esprit des gens et c'est ce que j'ai appris à l'univ' : quand on fait un script, il y'a bash et sh respectivement Bourne Again Shell et Bourne Shell. Maintenant il se peut bien qu'il nous aient glissés la remarque que sh peut désigner d'autres shell (je m'en souviens d'ailleurs plusieurs profs différents l'on faite... mais en général le sh était Bourne Shell).
Il me faut un Ubuntu mais bon depuis la catastrophe Gusty qui a profité à Debian je suis un peu en froid avec Ubuntu, il est user-friendly mais je pense que ça a un prix enfin bon c'est pas le sujet.
自分の考え:ウィンドウズがライナックスに対するのはデルフィがC++に対するようなものである。
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.
Hors ligne
Pages : 1