Script bash

 

1.    Rappels sur linux 1

1.1.     Interprétation du point 1

1.2.     Utilisation des pages man. 1

1.3.     Les variables 1

1.4.     shells 2

1.5.     Memo VI 2

2.    Commandes utiles 2

2.1.1.      Chercher une chaîne dans un fichier 2

2.1.2.      Alias 2

2.1.3.      Autre. 2

3.       Scripting. 3

3.1.     Métacaractères 3

3.2.     Canaux 4

3.3.     Options du shell 4

3.4.     TETE à TOTO. 4

3.5.     Syntaxe. 4

3.6.     Fonctions 5

3.7.     SED. 5

3.8.     Scripts utiles 5

3.8.1.      Alerte débordement 5

4.       Outils 6

4.1.1.      Konsole. 6

4.1.2.      outil screen. 6

5.       DIVERS. 6

5.1.     webographie. 6

 

 

 

1. Rappels sur linux

 

1.1.                Interprétation du point

./ repertoire courant

.  ./.  shell courant rep courant

.bb fichier caché

.sh extension ou separateur

 

 

1.2.                Utilisation des pages man

makewhatis indexe toutes les commandes man

puis

man -k user   // toutes les pages qui concernent user

man -k keyboard | grep 1 

 

voir man de test

 

 

1.3.                Les variables

variable exportées

variables locales

 

1.4.                shells

Pour les les connaître

cat /etc/shells

 

 

 

1.5.                Memo VI

:r nom_fichier.txt     ==> intègre un fichier

 

/ chaine à chercher    n pour next    en bas de fichier taper ? pour remonter la recherche

: se nu   afficher les numéros de ligne

 

vi /etc/profile +34  ouvrir le fichier en ligne 34

 

 

 

 

2. Commandes utiles

 

 

2.1.1.                     Transformer un fichier en pdf

Exemple du fichier man de la commande find

 

D’abord le convertir en postcript

 

man –t  find > find.ps

 

puis en pdf

 

ps2pdf   find.ps   find.pdf      

2.1.2.                     Chercher une chaîne dans un fichier

 

find /etc -type f -exec grep PS1{};

                            -print (nom de fichier)

Mieux avec XARGS

 

find /etc/bashrc  -type f | xargs grep -win export   =+> affiche les lignes des fichiers qui contiennent la chaine export

vi /etc/profile +34  ouvrir le fichier en ligne 34

 

 

XARGS

find /chemin -type f | xargs grep -l chaine    =+> l'option l affiche le nom du fichier qui contient la chaine.

 

 

2.1.3.                     Alias

 

Créer è alias rgrep="find. -type f |xargs grep -win "

 

Supprimer un alias è il suffit de le recréer

 

Alias existants è Alias

 

 

 

2.1.4.                     Autre

 

 

PATH=$(cat toto)   => $ envoi le contenu du fichier toto dans le path:w

 

chronométrer l'exécution d'un script time sleep 3

 

nice -19  plus haute priorité

 

ctrl L  clear immediat

 

activer numlock setleds +num

 

split -b 1400k etc.tar.gz etc.tar.gz.   =+> permet de diviser le fichier en petits du meme nom avec une extension (grace au point)

 

 

 

Fichier /etc/profile

 

dans un script

 

charger les var d env

#! /bin/bash                                      shebang

 

. mes_var_env.lib

 

 

Locate  è d’abord créer la base en scannant le disque avec updatedb

 

3. Scripting

 

Lancer un script

Rendre le fichier exécutable chmod +x    - ou pour tester bash nom de fichier ou encore .nomdefichier

 

Si dans un rep connu par le path  nomdefichier sinon ./nomdefichier

 

autre methode

exec ls    

 

    en tache de fond

      sleep 3 &  => lance et rend la main          -   ou bg sleep 3

 

 

3.1.                Métacaractères

ls l???  un caractère   renvoi link

ls [egh]    e ou g ou h   

ls [!a-h] exclusion des caractères de a à h

;  séparer les commandes sur une meme ligne

# commentaire

\  échapper

"chaine "    chaine de caractère  certains metacar sont interpretees ex "$a" renvoi la valeur de $a

''    dans une simple quote aucun metacarac n'est interprété

$a est un raccourci de ${a} meilleure manière d'écrire une variable  ex permet d'obtenir la longueur d'une variable ${#a}

 

 

3.2.                Canaux

Entrées sorties

1 > stdout écran

0< stdin clavier par défaut

2> stder ecran

 

ll liste.txt > fic.log 2>&1   je renvoie tout est dans le fichier fic.log  la sortie normale 2 et la sortie d'erreur &1

>>  concaténation ajoute au contenu du fichier

<<  "here document" jusqu'à ce que je rencontre  ex cat > fic.log << frank  permet de taper en spaghetti et d'enregistrer le contenu dans fic.log jusqu'a ce que je tape frank.

 

 

3.3.                Options du shell

set -o noclobber  ==> ll / > fic.log   si fic.log existe dejà il ne pourra pas etre ecrasé.

>| passer outre la protection noclubber

 

set -o xtrace

permet de debogguer les scripts  / indique l'ordre d'interpretation (parfois * intrepretée avant >  etc...)

set +o xtrace pour retirer le deboggeur

 

set -o noglobe  ==> les caractères spéciaux ne sont plus interprétés (+o) le remettre

 

3.4.                TETE à TOTO

cat < passwd > passwd   ==> tete à toto  entreé et sortie meme fichier ==> fichier écrasé !! toujours passer par un fichier intermédiaire. lecture de gauche à droite mais interprétation de droite à gauche

 

cat passwd | tr 'a-z' 'A-Z' > passwd

il crée d'abord le fichier vide il convertit en majuscule donc le fichier est vide

         

3.5.                Syntaxe

;  è entre les commandes ou passer à la ligne


test
  è vrai commande du shell ne pas l'utiliser pour les noms   =>   on le remplace par des crochets avec 4 blancs [  $1 = frank  ]

 

$#    è renvoie le nombre d'arguments   if [  $#=0  ] si le nombre d'argument est égal à 0

 

$0  èle nom du programme


$1
  èpremier argument passé en paramètres - Pour le récupérer   echo "bonjour" $1 si 10 arguments $1 $2      etc  puis ${10}

                

$() èTRES IMPORTANT  resultat=$(echo "scale=3; 10/3"| bc) 
renvoi le résultat de la commande (dans la parenthèse) dans la variable

               autre exemple à=$((25+5,7))  ==> calcul entre parenthèse sinon alphanumérique

 

-z $a  è if -z "$a"  si $a est nul  /////////  if test  ! -z "$a"  ==> si $a n'est pas nul

 

-a  è and  if test "$i" -ge 0 -a "$i" -le 9   ==> si $i est > à 0 et 

-o  è ou


``
 è quote inversées Attention ! substitution de commandes à utiliser avec précaution alt gr7

 

" "  è quotes "$nom"   protéger les variables avec des quotes  ==> exemple mkdir Mes documents (cree 2 rep il faut              faire mkdir "mes documents" 

 

df -h|grep hda1| tr -s " " | cut -d" " -f5

 

while attention aux 4 espaces indispensables ==>  while ["$nombre"-ne"$secret"]

 

if []  then  ou if test pas de crochet


if [ -d ] si c'est un répertoire

  - x  ==> est un executable

 

for fic  è  pour tous les fichiers 

 

gt  è greater than  plus grand que

lt  è plus petit

 

 

3.6.                Fonctions

Elle se crée (non pas dans un fichier mais en spaghetti)

typeset -f   ==> afficher toutes les fonctions

 

On exporte la fonction ensuite

export nom_de_fonction for fic in $(find "$rep" -type f | xargs grep -l "$old")

 

une fois créer la fonction se comporte comme une commande

 

Entrer en argument une serie

fic.txt

while read ligne

 

3.7.                SED

vi en ligne de commandes

ll / |sed 's/bash/ksh/g' /etc/passwd > ici il faut passer par un fichier temporaire

 

sed -i  ==> remplace dans le meme fichier

 

exemple

sed -i 's/chirac/frank/g' /root/SCRIPTS/replace/1 -   s pour subtitue  g pour globalement

 

Remplacer le mot exact et pas l'occurence

sed -i "s/\<$old\>/$new/g" passwd

 

 

3.8.                Scripts utiles

3.8.1.                     Alerte espace disques

if [ $(df -h|grep hda1| tr -s " " | cut -d" " -f5 |tr -d "%") -gt 30 ]; then echo db ;fi

 

/avec un mail

 

if [ $(df -h|grep hda1| tr -s " " | cut -d" " -f5 |tr -d "%") -gt 30 ]; then mail "db"  dfdf@free.fr ;fi

 

 

 

3.8.2.                     Remplacer des caractères

 

On indique les caractères à changer en paramètres

 

#! /bin/bash

 

rep="$1"

old="$2"

new="$3"

 

 

find "$rep" -type f | xargs grep -l "$old"

 

#find . -type f | xargs grep -l chirac

 

for fic in $(find "$rep" -type f | xargs grep -l "$old")

 

               do

                                sed -i "s/$old/$new/g" "$fic"

 

               done

 

 

 

 

3.8.3.                     Rechercher les exécutables

 

On indique le nom d’un répertoire en paramètre

 

#! /bin/bash

 

typeset -i cpt=0

 

clear

 

 

echo "entrer un répertoire"

 

read repertoire

 

if [ -d "$repertoire" ]

 

               then

                               for i in $(ls $repertoire/*)

                               do

                                              if [ -x $i ]

                                               then echo $i

                                               cpt=cpt+1

 

                                              fi

 

                               done

                                              echo "nombre de fichier $cpt"

 

else

               echo " pas un repertoire"

 

fi

 

 

 

 

 

 

 

 

 

 

 

4. Outils

 

4.1.1.                     Konsole

en mode graphique alt F2 ==> taper konsole

 

4.1.2.                     outil screen

Permet une prise en main
affichage en temps réel, l’utilisateur voit ce que l’on fait.

Connexion ssh puis

screen -x     

 

ctrl A + d détacher

c-aH enregistrement dans un fichier de log

 

5. DIVERS

partimage

 

 

5.1.                webographie

 

 

knoppix ==>

 

Levenez ==> histoire d’unix

creer un login persistent  permet d'enregistrer la config ex reseau sur la cle usb

kaella

geexbox   media center gratuite

 

davy.nguyen@gmail.com

 

lolix

 

vmware

virtualbox

freshmeat

sourceforge

 

Manuel - advanced bash scripting guide - google guide abs

traduc.org

 

site de christophe blaess aide memoire shell