Projet

Général

Profil

Liste de commandes pour des actions spécifiques. Pas/peu de détails/explications, prérequis de shell supposés connus. Si une commande est donnée pour bash uniquement, cela signifie qu'elle n'est pas compatible avec le shell POSIX ou d'autres implémentations basiques mais est vraisemblablement disponible dans les autres implémentations évoluées telles que zsh.

Jenselme en propose une version plus complète sur son blog

Générer des nombres aléatoires

  • $RANDOM (bash uniquement) : tire un nombre aléatoirement entre 0 - 32767
  • fortune | cksum | cut -f1 -d" " : si RANDOM n'est pas disponible, la commande fortune qui tire aléatoirement un proverbe l'est peut être. On en prend la somme pour obtenir un nombre.
  • seed=`( echo $$ ; time ps ; w ; date ) | cksum | cut -f1 -d" " ` : utilise la date où le PID du dernier processus.
  • dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -f1 -d" " : utilise l'entrée d'entropie du noyau. C'est la meilleur méthode, la plus robuste pour générer de l'aléatoire.

Prendre les x caractères d’une chaîne

cut -cN-M

Revenir dans le répertoire précédent

cd -

Vérifier paramètre non passé

! -z "$2" ou -n "$2"

Trier

sort

Compter

  • wc : pour les mots, caractères, nombres de lignes
  • let ou @$(( 6+8 )) : pour les opérations mathématiques

Savoir si une chaîne est contenue dans une autre

  • [[ reg_exp =~ contenant ]] bash uniquement
  • grep -q "reg_exp" chaine

Renommer les fichiers en fonction d’une expression régulière

<code class="bash">
for file in `ls` ; do
  a=`echo $file | sed 's/\(.*\)\.dump\(.*\)\.sql/\2.\1.sql/'`
  mv $file $a
done
</code>

On peut également utiliser Emacs.

Faire une copie statique d’un site

wget -mkKE assos.centrale-marseille.fr/NOM

Passer des caractères de fin de ligne DOS à UNIX

<code class="php">
sed $'s/\r$//' VOTRE_FICHIER > tmp && mv tmp VOTRE_FICHIER
</code>

Passer du texte en minuscule

a=COUCOU
echo ${a,,}

Savoir si un script est lancé dans un shell interactif

La commande tty -s renvoie 0 si le script est lancé dans un terminal interactif et 1 sinon.

Get git commit (including file content) between today and yesterday

<code class="php">
git_log=$(git log -p --since="yesterday" --pretty=format:"########## %s ###########")
if [ -n "$git_log" ] ; then
    echo "$git_log" | mail -s "[git] Report" $email_multi_assos
fi
</code>