/Programming/Bash-Synthese.mdÀ noter qu'il ne doit pas y avoir d'espace autour du =
VAR=1
VAR=$((VAR+1))
echo $VAR
((VAR=VAR+1))
echo $VAR
Affiche : 2 puis 3
(( VAR++ ))
echo $VAR
Affiche : 3
VAR="abcde"
echo $VAR
Affiche : abcde
VAR=$VAR"12345"
echo $VAR
Affiche : abcde12345
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
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
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
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.
cd /pentest/enumeration/dns/dns-bruteforce
C1=$PWD
cd /usr/share/ettercap
C2=$PWD
cd "$C1"
cd "$C2"
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
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" ]]
if [ ... ] ; then ; instructions ; fi
if [ ... ] ; then
instructions
fi
if [ ... ]
then
instructions
fi
| 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 |
[ $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
| Operateur | Signification |
|---|---|
| -f | is File |
| -d | is Dir |
| -e | Exists |
| -x | is eXecutable |
| -w | is Writeable |
| -r | is Readable |
Plus d'exemples : man test
[ -f "$fichier" ] && echo "Le fichier existe"
[ "$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
for i in $(seq 1 10) ; do echo $i ; done
for i in $(seq 1 10)
do
echo $i
done
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
n=$((RANDOM%3)) # % = modulo
case $n in
0) echo "Null" ;;
1) echo "Impair" ;;
2) echo "Pair" ;;
esac
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
}
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
}
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"