Joseph Tux

Fonctions personnelles

mercredi 18 mai 2011

Le fichier «  /.bash_functions »

Les fonctions présentent 2 caractéristiques importantes :

  • Contrairement à un alias, une fonction permet l’utilisation de variables, donc des arguments ailleurs qu’à la fin.
  • Contrairement à un script, une fonction n’ouvre pas un nouveau processus shell

Appel

Il est appelé de la même façon que mon fichier  /.bash_aliases, par  /.bash_rc qui contient les lignes suivantes :

# Définitions de fonctions
# Contrairement aux alias, laes fonctions prennent des variables en argument

if [ -f ~/.bash_functions ]; then
   . ~/.bash_functions
fi

Contenu

function TrouverCommande () {
### Afficher la commande ( responsable d'un processus ) qui occupe un fichier spécial
if [ ! -z $1 ] ; then
   if [ -c $1 ] ; then
       DEV=$1
#---# echo "DEBUG: avec paramètre en ligne:"
       echo "Le fichier spécial $DEV est occupé par la commande: "
       echo -en '\033[47;34m'
       ps -p $(fuser -v "$DEV" 2>&1 | egrep "$DEV" | awk '{print $3}') -o command=
       echo -en '\033[0m'
   else
       echo "$1 n'est pas un fichier spécial"
       exit 1
   fi
else
   # Fichier spécial son par défaut
   #^#---# echo "DEBUG: paramètre par défaut:"
   DEV='/dev/snd/pcmC0D0p'    
   if [ -a "$DEV" ] ; then
       echo "Le fichier spécial "$DEV" est occupé par la commande: "
       echo -en '\033[47;34m'
       ps -p $(fuser -v "$DEV" 2>&1 | egrep "$DEV" | awk '{print $3}') -o command=
       echo -en '\033[0m'
   else
       ( echo " syntaxe: TrouverCommande 'fichier_special' (ex: 'TrouverCommande /dev/snd/pcmC0D0p' ) " ; exit )
   fi
fi
}

### Mesure le total de la taille d'une liste de fichiers avec find (motif unique pour name)
# Cette fonction calcule le total apparent avec find "printf %s" , comme ls et ne tient pas compte de l'occupation des blocks
# Pour connaître l'occupation réelle, il faudrait utiliser "printf %b" * 512
function OccupationFichiers {
###     Syntaxe: OccupationFichiers 'motif'  ou: OccupationFichiers "motif" -Guillemets ou Apostrophes obligatoires.
###     $2 doit être i  ou  -i  ( faire iname au lieu de name ) [ ou -l ou -whole etc..]
opt=${2#[-]}
#---# echo "DEBUG $opt"
find ./ -${opt}name "$1" -printf "%s %p \n" | awk 'BEGIN {s=0; n=0} ; { s=s+$1; n=n+1 ;print "+ " $1 "  \t =" s "\t" $2 }; END {print "TOTAL:\t" n " fichiers pour " s/1000 " Ko, " s/1000000 " Mo" }'
}

### Mesure le total de la taille d'une liste de fichiers avec find (motif unique pour name)
# Cette fonction calcule le total apparent avec find "printf %s" , comme ls et ne tient pas compte de l'occupation des blocks
# Pour connaître l'occupation réelle, il faudrait utiliser "printf %b" * 512
function OccupationFichiers+ {
###     Syntaxe: OccupationFichiers 'motif'  ou: OccupationFichiers "motif" -Guillemets ou Apostrophes obligatoires.
###     $2 doit être i  ou  -i  ( faire iname au lieu de name ) [ ou -l ou -whole etc..]
if [[ $# < 1 ]]
then
echo "Il manque au moins un argument pour find ./ -name "
else
   opt=${2#[-]}
#---# echo "DEBUG $opt"
#---# echo "DEBUG $# "
   if [[ $# < 3 ]]
   then
#---# echo "DEBUG 1 ou 2 arguments = liste complete"
       ## 1 ou 2 argument = liste complete
       find ./ -${opt}name "$1" -printf "%s %p \n" | awk 'BEGIN {s=0; n=0} ; { s=s+$1; n=n+1 ;print "+ " $1 "  \t =" s "\t" $2 }; END {print "TOTAL:\t" n " fichiers pour " s/1000 " Ko, " s/1000000 " Mo" }'
   elif [[ $3 == "-q" ]]
   then
#---# echo "DEBUG: Totaux seulement"
       ## 3e argument -q = totaux seulement
       find ./ -${opt}name "$1" -printf "%s %p \n" | awk 'BEGIN {s=0; n=0} ; { s=s+$1; n=n+1 ;}; END {print "TOTAL:\t" n " fichiers pour " s/1000 " Ko, " s/1000000 " Mo" }';
   fi
fi
}

function OccupationFichiersBlocks {
###     Syntaxe: OccupationFichiers 'motif'  ou: OccupationFichiers "motif" -Guillemets ou Apostrophes obligatoires.
opt=${2#[-]}
#---# echo "DEBUG $opt"
find ./ -${opt}name "$1" -printf "%b %p \n" | awk 'BEGIN {s=0; n=0} ; { s=s+$1; n=n+1 ;print "+ " $1 "  \t =" s "\t" $2 }; END {print "TOTAL:\t" n " fichiers pour " s " Blocks, soit: " s*512/1000 " Ko, " s*512/1000000 " Mo" }'
}

function OccupationSystem {
### Occupation physique du système (pas des données /home, ni de /tmp en memoire (tmpfs)
df | egrep -v '/home|tmpfs|media|^/dev/mapper/|^Sys|^udev\s' | awk 'BEGIN {b=0} {a=NF-4 ; b=b+$a ; print $NF "\t" $a/1000 " Mo" } END { print "TOTAL: " b " Ko, " b/1000 " Mo, " b/1000000 " Go"}'
}

################################### FIN DES FONCTIONS #####################################
# Fonction AideFonctions à compléter
function AideFonctions {
echo -en '\033[47;34m'
echo -n 'TrouverCommande'
echo -en '\033[0m'
echo '      ### Afficher la commande ( responsable d un processus ) qui occupe un fichier spécial'
echo '                       # Syntaxe: TrouverCommande [Fichier spécial] - par défaut: fichier son /dev/snd/pcmC0D0p - '
echo -en '\033[47;34m'
echo -n 'OccupationFichiers'
echo -en '\033[0m'
echo "   ### Taille apparente avec total d'une liste de fichiers avec find (motif unique pour name, option 'i' ou '-i' pour iname)"
echo '                       # Syntaxe: OccupationFichiers ' "'motif' [[-]i]" ' ou: OccupationFichiers "motif" [[-]i] - Guillemets ou Apostrophes obligatoires - '
echo -en '\033[47;34m'
echo -n 'OccupationFichiers+'
echo -en '\033[0m'
echo "   ### Taille totale apparente d'une liste de fichiers avec find (motif unique pour name, option 'i' ou '-i' pour iname)"
echo '                       # Syntaxe: OccupationFichiers ' "'motif' [[-]i]" ' ou: OccupationFichiers "motif" [[-]i] - Guillemets ou Apostrophes obligatoires - '
echo -en '\033[47;34m'
echo -n 'OccupationFichiersBlocks'
echo -en '\033[0m'
echo "   ### Taille totale par blocs d'une liste de fichiers avec find (motif unique pour name, option 'i' ou '-i' pour iname)"
echo '                       # Syntaxe: OccupationFichiers ' "'motif' [[-]i]" ' ou: OccupationFichiers "motif" [[-]i] - Guillemets ou Apostrophes obligatoires - '
echo -en '\033[47;34m'
echo -n 'OccupationSystem
echo -en '\033[0m'
echo ' ### Occupation physique du système (pas des données /home, ni de /tmp en memoire (tmpfs)'
echo '   # Syntaxe
##### Modèle à copier pour créer l'aide d'une fonction:
#echo -en '\033[47;34m'
#echo -n 'nom de la fonction'
#echo -en '\033[0m'
#echo ' ### Définition'
#echo '   # Syntaxe
#####
}
################################### FIN DES FONCTIONS #####################################
echo 'Fonctions de ~/.bash_function activées (faire AideFonctions) '

Son utilisation la plus simple est la mise à disposition de ligne de commande un peu compliquée ou longue à reconstituer.


Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 105 / 57586

Suivre la vie du site fr  Suivre la vie du site GNU, LINUX, BSD, LL  Suivre la vie du site AIDES GNU/LINUX  Suivre la vie du site BASH   ?

Site réalisé avec SPIP 3.1.6 + AHUNTSIC

Creative Commons License