Script bash
1.2. Utilisation des pages man
2.1.1. Chercher une chaîne dans un fichier
./ repertoire courant
. ./. shell courant rep courant
.bb fichier caché
.sh extension ou separateur
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
variable exportées
variables locales
Pour les les connaître
cat /etc/shells
: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
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
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.
Créer è alias rgrep="find. -type f |xargs grep -win "
Supprimer un alias è il suffit de le recréer
Alias existants è Alias
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
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
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}
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.
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
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
; è 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
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
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
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
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
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
en mode graphique alt F2 ==> taper konsole
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
partimage
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
lolix
vmware
virtualbox
freshmeat
sourceforge
Manuel - advanced
bash scripting guide - google guide abs
traduc.org
site de christophe blaess aide memoire shell