[*] -  SecureInfo.eu, /_tmp/Bash-Synthese.md

Back


Variables

Attribution d une valeur à une variable

À noter qu'il ne doit pas y avoir d'espace autour du =

VAR=1

Opérations numériques

VAR=$((VAR+1))
echo $VAR

((VAR=VAR+1))
echo $VAR

Affiche : 2 puis 3

(( VAR++ ))
echo $VAR

Affiche : 3

Concaténation

VAR="abcde"
echo $VAR

Affiche : abcde

VAR=$VAR"12345"
echo $VAR

Affiche : abcde12345

Tableaux

VAR=( 1 2 3 4 E F G )
echo ${VAR[0]}                      # Affiche: 1
echo ${VAR[1]}                      # Affiche: 1
echo ${VAR[2]}                      # Affiche: 2
VAR[1]=$(( ${VAR[1]} + ${VAR[2]} )) # 2+3
echo ${VAR[1]}                      # Affiche: 1+2 = 3

Le symbole @ représente les éléments du tableau. Pour parcourir un tableau :

for i in ${VAR[@]} ; do
    echo $i
done





Substitutions

VAR="azerty"
echo ${VAR:="qsd"} 

Affichera azerty

VAR=""
echo ${VAR:="qsd"} 

Remplace $VAR par "qsd", si $VAR est vide, et affichera qsd

VAR="azerty"
echo ${VAR/az/qw} 

Remplace az par qw, et affichera qwerty

Pour aller plus loin : www.cyberciti.biz > bash-shell-parameter-substitution





Evaluation

echo "La date est `date`"
echo "La date est $(date)"

Ces 2 commandes ont le même effet.

my_command="ls -l ~"
my_result=$($my_command)

echo $my_result affiche le contenu de ~ sur une ligne. tandis que echo $my_result affiche le contenu de ~ sur plusieurs ligne.

Pour l'afficher sur plusieurs lignes : echo "$my_result"

user_list=`cut -d':' -f1 /etc/passwd` # La liste des utilisateurs
echo "$user_list"                     # et l affiche





Naviguer entre les dossiers

Petite astuce, pour naviguer entre plusieurs dossier, il est utile de garder les dossiers quelque part en mémoire, soit dans des variables, soit dans la pile.

Par les variables...

cd /pentest/enumeration/dns/dns-bruteforce         
C1=$PWD                               

cd /usr/share/ettercap                
C2=$PWD

cd "$C1"
cd "$C2"

...par la pile

pushd /pentest/enumeration/dns/dns-bruteforce 
pushd /usr/share/ettercap

popd # /usr/share/ettercap
popd # /pentest/enumeration/dns/dns-bruteforce

Pour connaitre les variables d'environnement il suffit de taper à l'invité de commande : env





Les conditions

La condition suivante renvoie le code d erreur : [ "$CONDITION" ]

ET celle-ci renvoie 0 s il n y a pas d erreur sinon 1 : [[ "$CONDITION" ]]

La condition en tant que telle : if-then-fi

if [ ... ] ; then ; instructions ; fi

if [ ... ] ; then
  instructions
fi

if [ ... ]
then
  instructions
fi

Récapitulatif des conditions de comparaison :

Operateur Comparaison Signification
-gt > greater than
-ge >= greater or equal
-lt < less than
-le <= less or equal
-eq == equal
-ne != not equal
-a && and
-o || or

Exemples :

[ $nombre -eq 1 ] && echo $((nombre+1))
[ "$chaine" = "str" ] && echo "Ok"

note=14

if [ $note -ne 20 -a $note -gt 10 ]; then
  echo "Accepté"
fi

# La 2ème condition n'est testé que si la première est positive
if [ $note -ne 20 ] && [ $note -gt 10 ]; then
  echo "Accepté"
fi

Conditions sur les fichiers :

Operateur Signification
-f is File
-d is Dir
-e Exists
-x is eXecutable
-w is Writeable
-r is Readable

Plus d'exemples : man test

Exemple :

[ -f "$fichier" ] && echo "Le fichier existe"

Sous-instructions :

[ "$COND" ] && ( commande1 ; commande2 )
# /!/ La fonction 'exit' dans ces sous-instructions ne sort pas du programme
# tout du moins, sous Bash.

# Conditions multilples :
if [ "$COND1" ] ; then
  elif [ "$COND2" ] ; then
    $ACTIONS
  fi
fi

case "$VAR" in 
   "val1") "$ACTION1" ;;
   "val2") "$ACTION2" ;;
   "val3") "$ACTION3" ;;
esac

Les boucles

Boucles FOR

for i in $(seq 1 10) ; do echo $i ; done

for i in $(seq 1 10)
do
  echo $i
done

Boucles WHILE

i=0
while [ $i -lt 10 ]
do
  i=$((i+1))
  echo $i
done

Sur une ligne :

i=0
while [ $i -lt 10 ] ; do ((i++)) ; echo $i ; done

Case

n=$((RANDOM%3)) # % = modulo

case $n in
  0) echo "Null"   ;;
  1) echo "Impair" ;;
  2) echo "Pair"   ;;
esac





Les fonctions

function MaFonction()
{
  # Les parametres sont comme pour un script Bash
  echo "Parametres : $*"
}

# Les parantheses sont facultatives
function MaFonction
{
  # Les paramètres sont comme pour un script Bash
  echo "Parametres : $*"

  # Sort du script/programme
  exit 1
}

Code de retour

Les fonctions peuvent retourner un code d erreur propre à elles

function MaFonction
{
  # Les parametres sont comme pour un script Bash
  echo "Parametres : $*"

  # Sort de la fonction avec son code d erreur
  return 1
}

Valeurs de retour

Les fonctions peuvent renvoyer une valeur

function NoterEleve
{
  A=$1
  B=$2
  (( M=B/2 ))

  [ $A -gt $M ] && ret=0 || ret=1
  if [ $ret -eq 0 ]; then
    echo "réussi"
  else
    echo "échoué"
  fi
  return $ret
}

Notation=$(NoterEleve 14 20) && echo "Vous avez $Notation" || echo "Désolé, vous avez $Notation"
⬆️ Top
admin