====== Bash Cheat Sheet ====== ---- ===== Opérateurs ===== ---- ==== String ==== * Identiques : [ "str1" = "str2" ] * Différente : [ "str1 != "str2"] * Non vide : [ -n "str1" ] * Vide : [ -z "str1" ] ==== Numbers ==== * Egaux : [ nb1 -eq nb2 ] * Différents : [ nb1 -ne nb2 ] * Sup à > : [ nb1 -gt nb2 ] * Sup ou égal >= : [ nb1 -ge nb2 ] * Inf à < : [ nb1 -lt nb2 ] * Inf ou égal <= : [nb1 -le nb2 ] ==== Fichiers et répertoires ==== * Exécutable (par le user courant) : [ -x filename ] #Uniquement fichiers * Writable (user courant) : [ -w filename ] * Readable (user courant) : [ -r filename ] * Est un fichier : -f * Est un répertoire : -d * Existe : -e * Taille > 0 : -s ===== Gestion des options ===== Les options doivent être avant les paramètres 'classique' #!/bin/bash #On met les options à false optA=false; optB=false; #Définion de la commande cmd="ls"; #Check des options while true do case "$1" in -a) echo "option a" opta=true cmd+=" -a" #bien penser à l'espace shift ;; -b) echo "option b" optb=true cmd+=" -b" shift;; *) break;; esac done echo "$cmd" #affiche ls -a -b si les deux options sont présentes if [[ ! -z "$1" ]] then echo "$1"; else echo "pas de paramètre" fi ===== Fichiers ou répertoires dans un tableau ===== #!/bin/bash repertoire="/home/pillow/" cmd="ls $repertoire" files_folders=$($cmd) folders=() #déclaration tableau vide echo $files_folders #sortie de ls for file in $files_folders do if [[ -d $repertoire$file ]] && [[ -e $repertoire$file ]] && [[ "$file" != "." ]] && [[ "$file" != ".." ]] then folders+=("$repertoire$file") #ajout à la fin du tableau fi done echo "Nombre de répertoires : ${#folders[@]}" files_array=(${files_folders// /}) # transforme la string en tableu avec ' ' comme séparateur echo $files_array echo "Nombre de fichiers et répertoires : ${#files_array[@]}" echo $repertoire${files_array[0]} ===== Effacer fichiers selon conditions (find) ===== Motif de base : ''find /repertoire -type f -name "*.log" -exec rm {} \;'' Conditions possibles : == -type == * * f : fichier * * d : repertoire * * l : lien symbolique * * c : périphérique caractère * * s : socket * * b : périphérique bloc * * p : tube nommé (FIFO) == -name "regexp" == * * peut être combiné avec \( -name "*.log" -o -name "*.py"\) * * exlcusion : ! -name "*.bak" == -size [valeur] == (c => octets, k => ko, M => Mo, G => Go) * * exactement : -size 1M * * plus de : -size +10M * * moins de : -size - 10k * * plage : -size 1M -a -size -10M == Dates [valeur en jours] == * * -mtime : modification * * -atime accès * * -ctime changement méta donénes (chmod par exemple) * * exactement : -date 7 * * plus de : -date +30 * * moins de : -date -1 == -perm [mode] (permissions) == * * Octale : -perm 644 * * Symbolique -perm /u+s ou /g=w * * Au moins : -644 * * Exactement : 644 == -user nomuser == * ! -user nomuser * -group nomgroup * ! - group nomgroup * -user nomuser -group nomgroup == Exécution == * -exec [command] {} \; <- Sans demander de confirmation * -ok [command] {} \; <- avec confirmation