Fonctions en Shell Debian/ubuntu/gentoo

Résolu/Fermé
EminoMeneko Messages postés 2434 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 - 19 mars 2008 à 11:02
EminoMeneko Messages postés 2434 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 - 13 avril 2008 à 12:03
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.
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
A voir également:

2 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
19 mars 2008 à 14:32
essayer avec #!/bin/bash pour être sur
changer if [ $? = 0 ] par if [ $? -eq 0 ]
et j'ajouterais un ; après la dernière instruction de chaque fonction
{ list; }

Placing a list of commands between curly braces causes the list to be executed in the current shell context. No subshell is created. The semicolon (or newline) following list is required.
1
EminoMeneko Messages postés 2434 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
13 avril 2008 à 12:03
J'avais pas mis à jour mais j'ai bien résolu le problème peu de temps après en mettant bash :)
Merci pour ton aide qui va plus loin que la solution. :)
0