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 30/05/2008, à 19:44

in_vino_veritas

[BASH] Script montage/démontage disque

Bonsoir,

Je viens d'écrire mon tout premier script et je serais content d'avoir des retours (améliorations possibles, optimisation, conseils...).

Je l'utilise pour monter ou démonter mes disques réseau (mode noauto dans fstab)

#!/bin/bash

# retourne TRUE si un disque est monté, FALSE sinon
function _get_state()
{
if ( grep -q $1 /etc/mtab ) 
then echo TRUE
else echo FALSE
fi
}

# monte ou démonte un disque
function _mount_umount()
{
# demande montage et pas monté
if ( echo $CHOIX | grep -q $1 ) && [[ $2 == FALSE ]]
then
	mount /media/$3

# demande démontage et monté
elif !( echo $CHOIX | grep -q $1 ) && [[ $2 == TRUE ]]
then
	umount /media/$3
fi
}

# init nom des disques (voir /etc/fstab)
DRIVE_VID="WD-NetCenter-Video"
DRIVE_BCK="WD-NetCenter-Backup"

# init état des disques
DRIVE_VID_MOUNTED=$(_get_state $DRIVE_VID)
DRIVE_BCK_MOUNTED=$(_get_state $DRIVE_BCK)

# affichage menu avec cases a cocher
CHOIX=$(zenity \
	--width=300 --height=200 \
	--title="WD-NetCenter" \
	--list --checklist  \
	--text="Montage / Démontage" \
	--column="Etat" --column="" --column="Nom" \
	--hide-column=2 \
	$DRIVE_VID_MOUNTED VID $DRIVE_VID \
	$DRIVE_BCK_MOUNTED BCK $DRIVE_BCK);

# sortie si click sur "Annuler"
if [[ $? == "1" ]]
then exit
fi

# montage/démontage
_mount_umount "VID" $DRIVE_VID_MOUNTED $DRIVE_VID
_mount_umount "BCK" $DRIVE_BCK_MOUNTED $DRIVE_BCK

Par ailleurs, j'aimerais savoir si il existe un éditeur plus sympa que gedit pour écrire du script (auto-indent, comment/uncomment block...)


XPS M1530: T9300/4Go/200Go-7200tpm/8600M GT/Vista

Hors ligne

#2 Le 30/05/2008, à 20:15

edenpulse

Re : [BASH] Script montage/démontage disque

mousepad originaire de xfce, marche tres bien,, c'est le plus petit qui existe... et sinon ya geany qui est vraiment bon! et kate pour les kde users


http://edp.free-h.net
venez nombreux!
Tutos linux dispo!

Hors ligne

#3 Le 31/05/2008, à 09:41

philou8237

Re : [BASH] Script montage/démontage disque

Juste un point... indente tes fonctions, c'est plus simple à lire ensuite.
Genre :

function _get_state()
{
  if ( grep -q $1 /etc/mtab ); then
    echo TRUE
  else
    echo FALSE
  fi
}

Hors ligne

#4 Le 31/05/2008, à 11:18

in_vino_veritas

Re : [BASH] Script montage/démontage disque

J'ai un peu modifier le script surtout pour ne pas utiliser de variables "globales" dans une fonction (vieille habitude du C et autres langages).

#!/bin/bash

function _get_state() {
# test si un disque est monté
# $1=nom du disque
# stdout=TRUE si le disque est monté, FALSE sinon
if ( grep -q $1 /etc/mtab ); then
	echo TRUE
else
	echo FALSE
fi
}

function _mount_umount() {
# monte ou démonte un disque
# $1=état demande
# $2=état montage
# $3=nom du disque (point de montage dans /media)
if [[ $1 == TRUE ]] && [[ $2 == FALSE ]]; then
	mount /media/$3
elif [[ $1 == FALSE ]] && [[ $2 == TRUE ]]; then
	umount /media/$3
fi
}

function _test_exit() {
# test si appui sur "Annuler" dans zenity
if [[ $? == "1" ]]; then
	exit
fi	
}

# init nom des disques (voir /etc/fstab)
DRIVE_VID="WD-NetCenter-Video"
DRIVE_BCK="WD-NetCenter-Backup"

# init état des disques
DRIVE_VID_MOUNTED=$(_get_state $DRIVE_VID)
DRIVE_BCK_MOUNTED=$(_get_state $DRIVE_BCK)

# affichage menu avec cases a cocher
CHOIX=$(zenity \
	--width=300 --height=200 \
	--title="WD-NetCenter" \
	--text="Montage / Démontage" \
	--list --checklist  \
	--column="Etat" --column="" --column="Nom" \
	--hide-column=2 \
	$DRIVE_VID_MOUNTED VID $DRIVE_VID \
	$DRIVE_BCK_MOUNTED BCK $DRIVE_BCK); _test_exit

# analyse du choix
if ( echo $CHOIX | grep -q "VID" ); then
	DRIVE_VID_MOUNTREQ=TRUE
else
	DRIVE_VID_MOUNTREQ=FALSE
fi

if ( echo $CHOIX | grep -q "BCK" ); then
	DRIVE_BCK_MOUNTREQ=TRUE
else
	DRIVE_BCK_MOUNTREQ=FALSE
fi

# montage/démontage
_mount_umount $DRIVE_VID_MOUNTREQ $DRIVE_VID_MOUNTED $DRIVE_VID
_mount_umount $DRIVE_BCK_MOUNTREQ $DRIVE_BCK_MOUNTED $DRIVE_BCK

J'aimerais savoir si il est possible d'affecter directement la valeur TRUE ou FALSE à une variable sans passer par une structure IF/THEN genre

DRIVE_VID_MOUNTREQ=iif(( echo $CHOIX | grep -q "VID" ); TRUE; FALSE)

XPS M1530: T9300/4Go/200Go-7200tpm/8600M GT/Vista

Hors ligne

#5 Le 31/05/2008, à 11:59

in_vino_veritas

Re : [BASH] Script montage/démontage disque

Bon en fait j'ai trouvé une solution

...

function _iif() {
# test résultat dernière commande
# $1=valeur si résultat OK
# $2=valeur si résultat KO
# stdout=valeur
	if [[ $? == 0 ]]; then
		echo $1
	else
		echo $2
	fi
}

...

# analyse du choix
# analyse du choix
DRIVE_VID_MOUNTREQ=$(_iif `echo $CHOIX | grep -q "VID"` TRUE FALSE)
DRIVE_BCK_MOUNTREQ=$(_iif `echo $CHOIX | grep -q "BCK"` TRUE FALSE)

...

Au fait, j'utilise geany: excellent, merci edenpulse

Dernière modification par in_vino_veritas (Le 31/05/2008, à 12:04)


XPS M1530: T9300/4Go/200Go-7200tpm/8600M GT/Vista

Hors ligne