#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