Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 hmm

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 smile 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. smile

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 wink
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 cool)
Je vais aussi essayer de remettre en bash dans ce cas. Peut-être que ça va aider. smile


自分の考え:ウィンドウズライナックスに対するのはデルフィ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

valAa a écrit :

Salut,
Sous ubuntu depuis Edgy, le shell par défaut est dash (et plus bash).

'tiiinnn vj'viens de la comprendre tongue.... 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

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 tongue.... 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 tongue

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

valAa a écrit :

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 wink


"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

valAa a écrit :
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 tongue.... 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 tongue

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à...

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. smile


自分の考え:ウィンドウズライナックスに対するのはデルフィ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