à propos des scripts bash

Discussion dans 'Linux' créé par Bandix400, 10 Avril 2014.

  1. Bandix400 Modérateur

    Dans le tuto la µsd toute une Mount-agne, partie 1 ou partie 2 sont développés un ensemble de script shell ; Pour ceux qui n'y sont pas familier, cela ressemble surtout à un truc infâme dont on ne sait par quels bouts le prendre. Du coup j'ouvre ce thread pour en discuter.

    Par exemple le script final
    #!/bin/sh
    CMD=$1
    SD=/dev/mmcblk1p1
    set -- `/sbin/blkid -c /dev/null -o export $SD | grep UUID= | tr '=' ' '`
    UUID=$2
    SDCARD=/media/sdcard/$UUID
    [ -z $UUID ] && exit
    [ -z $CMD ] && exit
    [ $CMD = "mount" ] && {
    [ ! -d $SDCARD ] && mkdir $SDCARD
    mount | grep -q mmcblk1p1
    [ $? -eq 1 ] && \
    mount /dev/mmcblk1p1 \
    -t auto \
    -o rw,dirsync,nosuid,nodev,noexec,noatime,thread_pool=4,ssd,noacl,space_cache \
    $SDCARD
    df -h | grep -q $SDCARD
    [ $? -eq 0 ] && {
    mount -o bind $SDCARD /home/nemo/SD64
    mount -o bind $SDCARD /data/sdcard/SD64
    }
    }
    [ $CMD = "umount" ] && {
    MTList=`awk -v SDM=$SD '
    BEGIN {LISTE=""}
    $0 ~ SDM { LISTE=($2" "LISTE) }
    END { print LISTE} ' /etc/mtab`
    for DIR in $MTList
    do
    umount $DIR
    [ $? -eq 1 ] && echo problème $DIR toujours monté
    done
    }

    est écrit de manière naïve ; en exploitant les fonctionnalits de bash, il et possible de le rationaliser de la sorte :

    #!/bin/sh
    CMD=$1
    SD=/dev/mmcblk1p1
    syntaxe="verifiez votre argument : SD.sh mount ou SD.sh umount"

    set -- `/sbin/blkid -c /dev/null -o export $SD | grep UUID= | tr '=' ' '`
    UUID=$2
    [ -z $UUID ] && echo $syntaxe && exit
    [ -z $CMD ] && echo $syntaxe && exit

    function Mount {
    lSDCARD=$1
    [ ! -d $lSDCARD ] && mkdir $lSDCARD
    mount | grep -q mmcblk1p1
    [ $? -eq 1 ] && \
    mount /dev/mmcblk1p1 \
    -t auto \
    -o rw,dirsync,nosuid,nodev,noexec,noatime,thread_pool=4,ssd,noacl,space_cache \
    $lSDCARD
    df -h | grep -q $lSDCARD
    [ $? -eq 0 ] && {
    mount -o bind $lSDCARD /home/nemo/SD64
    mount -o bind $lSDCARD /data/sdcard/SD64
    }
    }

    function UMount {
    lSDM=$1
    MTList=`awk -v SDM=$lSDM '
    BEGIN {LISTE=""}
    $0 ~ SDM { LISTE=($2" "LISTE) }
    END { print LISTE} ' /etc/mtab`
    for DIR in $MTList
    do
    umount $DIR
    [ $? -ne 0 ] && echo problème $DIR toujours monté
    done
    }

    SDCARD=/media/sdcard/$UUID
    case "$CMD" in
    mount) Mount $SDCARD
    ;;
    umount) UMount $SD
    ;;
    *) echo $syntaxe
    ;;
    esac

    ce qui est tout de même plus clair ! non ?

    Comment c'est pire ? Alors posez vos questions que l'on se familiarise avec le shell-script de bash !

Partager cette page