Bash

De drev
Aller à : navigation, rechercher

Notes

Les espaces (ou leurs absence) sont important.

Notamment pour assigner une valeur a une variable, il n'y a pas d'espaces autour du signe égale.

Variables

Assignation

Depuis une commande

width=`identify -format "%w" $1`

ou

width=$(identify -format "%w" $1)

notes:

  • la variable ne prend pas de $ durant la déclaration/assignation
  • Pas d'espaces avant ou après le =


Depuis l'entrée standard

Commande read

echo "Enter something" ; read var ; echo "this is -> " $var
Enter something
something
this is ->  something

Condition

if

( ) pour les entiers [ ] pour les chaines de caractere

if (( $width > 700*2 )); then



else


fi

case

case "$1" in
        start)
            start
            ;;
         
        stop)
            stop
            ;;
         
        status)
            status anacron
            ;;
        restart)
            stop
            start
            ;;
        condrestart)
            if test "x`pidof anacron`" != x; then
                stop
                start
            fi
            ;;
         
        *)
            echo $"Usage: $0 {start|stop|restart|condrestart|status}"
            exit 1
 
esac

Boucles

for

for i in {1..10}; do echo $i; done
for i in *.jpg; do echo $i; done
for i in *; do echo $i; done;


Boucle sur le contenu d'un fichier

for line in `cat file.txt`; do echo "$line"; done


  • Boucler sur les repertoires
for d in *; do echo $d; done;

fonction

définir

function a_function(){
}

arguments

Bien qu'une fonction se déclare avec une paire de parentheses, les arguments se situent dans des variable $1, $2, $3, ...

valeur de retour

pour retourner une valeur, on peut faire un echo dans la fonction et assigner la valeur avec un val=$(a_function) lors de l'appel

function a_function(){
  echo 'ok'
}

val=$(a_function)
echo "value of val is " val
> Value of val is ok

REGEX

[[ ]]

  • ne fonctionne qu'avec bash (et non sh)
#!/bin/bash

files="*-0.jpg"
regex="(.+?)-[0].jpg"

for f in $files
do
    [[ $f =~ $regex ]]
    name=${BASH_REMATCH[1]}
    echo $name
done

sed

echo "FIRST SECOND" | sed 's/.* //'

SECOND

Desactiver la sortie ecran

Utile pour demander un mot de passe :

'stty -echo'


Chaîne de caractères

Pour les exemples qui suivent, une variable str est definit comme suit:

str="TEST"

longueur d'une chaîne

echo ${#str}

$ 4

replacer des characters

  • Exemple: retirer tout les -
str="string-with-some-dash"
echo ${str//-}

$ stringwithsomedash

Conserver le dernier caractère

${str: -1}

Toute la chaîne sauf le dernier caractère

${str::-1}

nom de fichiers sans extension

par exemple dans un répertoire

for i in *.jpg; do echo ${i%.*};done

Concatenation

De deux variables

$res=$var1 $var2

D'une variable et d'une chaîne de caractère

$res="$var I am a string"

renommer en masse

Exemple : .zip vers .cbz

 find . -name "*.zip" -exec rename -v 's/\.zip$/\.cbz/' {} +

Voir aussi

Category:Commandes Unix