31/07/2014 mise à jour 29/09/2020
Dans cet article :
Le shell est bash
moa est le nom de l’utilisateur, son dossier personnel est /home/moa
Cette variable renvoie un chaine contentant les arguments ($1, $2, ...) séparés par des espaces. Cette chaine est facile à parcourir avec for ... in "$@"
.
Exemple :
#!/bin/bash echo $@ for x in "$@" do echo $x done
Cette commande parcourt les arguments et décrémente leur nombre.
Exemple :
#!/bin/bash while [ $# -gt 0 ] do echo $1 shift done
C’est incroyable les conneries qu’on trouve sur le web !
# fdisk -l
. Vous allez trouver quelque chose comme /dev/sbd
ou /deb/sbc
.# copy machin-truc-7.1-zob.iso /dev/sbx
où /dev/sbx est celui qui a été révélé par fdisk.# sync
pour s’assurer que le tampon a été vidé.C’est tout !
C’est pénible de devoir tout le temps taper cd /home/moa/src/python/
pour aller dans un dossier qu'on fréquente souvent. En ce moment, pour moi, c'est cpp plutôt que python.
Comme PATH
, CDPATH
est une variable d’environnement qui permet de mettre à disposition des chemins fréquemment utilisés par la commande cd. Elle a la même syntaxe que PATH : les chemins sont séparés par des deux points.
Exemple :
$ export CDPATH=".:/home/moa:/home/moa/src/python" $ ls ~/src/python/ classes doc math physique re
$ ls ~/src/python/math infix2postfix.py lex.py __pycache__ symbolic.py zob.py $ cd math /home/moa/src/python/math ~/src/python/math$ pwd /home/moa/src/python/math ~/src/python/math$ ls infix2postfix.py lex.py __pycache__ symbolic.py zob.py
Dans vim on peut simplement taper :cd math puis :e symbolic.py
The UNIX School
Vous connaissez pwd
, qui permet de savoir dans quel dossier on se trouve. La variable environnement PWD
contient ce dossier. Les commandes pwd
et echo $PWD
donnent le même résultat.
Il y aussi une variable similaire $OLDPWD
qui mémorise le dernier dossier qu’on a fréquenté.
Exemple : vous étiez dans un merdier du genre :
/usr/share/pyshared/numpy/lib/tests
que vous avez quitté pour retourner à votre $HOME/src/python/math
. Mince ! vous avez oublié de jeter un œil sur le fichier test_format.py. Tapez :
less $OLDPWD/test_format.py
Un raccourci pour basculer entre les deux derniers répertoires est ~-
(tilde tiret).
Pour renommer tous les fichiers *.dat
en *.txt
:
$ rename .dat$ .txt *.dat
Renommer les fichiers *.dat
en *.txt
:
for f in *.dat;do mv "$f" "${f%dat}"txt ;done
Remarque : Avec f=zob.dat :
${f%dat}
renvoie zob.
Et ${f#zob.}
renvoie dat
.
Ayant des fichiers préfixés qlam_index.html qlam_listes.html, ... on se propose de supprimer les préfixes pour obtenir index.html, listes.htm, ...
$ for f in qlam_*.txt; do mv "$f" "${f#qlam_}"; done
Cette méthode est récursive, i.e. elle descend dans toute l'arborescence du dossier courant.
$ find . -name "qlam_*.txt" | sed -r 's/\.\/(.*?)qlam_(.+)/mv & \1\2 | bash
Remarque :
Dans la substitution la partie \./
supprime les "./" que find renvoie.
La syntaxe de la substitution est un peu obscure. le &
fait référence à l'expression régulière qui précède.
Tous les fichiers dans le dossier courant et ses sous dossiers sont renommés.
On suppose qu'on a les fichiers :
CR-12042015.pdf CR-28122018.pdf CR-07082017.pdf
où les chffres qui suivent CR- correspondent à des dates au format jjmmaaaa. On voudrait les renommer au format CR-aaaa-mm-jj.pdf, afin de les ordonner par date.
$ sed -r 's/CR-(..)(..)(....).*/mv & CR-\3-\2-\1.pdf CR-*.pdf
$ for f in *.pdf; do mv "$f" "CR-${f:7:4}-${f:5:2}-${f:3:2}.pdf"; done
Elle contient le format (indigeste) du prompt du shell.
On peut la modifier pour changer l’apparence du prompt. echo $PS1
donne quelque chose du genre :
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Si on veut un retour de ligne avant le $, on tape en ligne de commande :
$ export PS1="\u@\h:\w\n$"
On obtient ce genre d’affichage :
grognon@vieux:~/src/python/qlam $ vim ~/.bashrc grognon@vieux:~/src/python/qlam $
Si en plus on veut afficher le prompt en rouge clair, on tape :
$ export PS1="\e[1;31m\u@\h:\w\n$ \e[m"
Pour rendre permanente la modification, ajoutez la ligne à votre .bashrc
Source : thegeekstuff
Si vim est compilé avec l’option +clipboard (vim --version), on peut accéder au X clipboard (celui du gestionnaire de fenêtres).
Pour coller depuis le presse-papier système : "*p
Pour copier depuis vim vers le presse-papier système : "*y
Le but est de se passer de filezilla et autre client GUI. On utilise donc exclusivement ftp. Les notations sont les suivantes :
Dossier local : /data/local/
Hôte : ftp.server.net
Utilisateur : grognon
#!/bin/bash cd /data/local/$1 ftp -in ftp.server.net<<FIN2 user grognon put $1 bye FIN2
#!/bin/bash if [ $# -eq 0 ] then echo Usage : qput [dir/]file exit 0 fi bn=$(basename $1) dn=$(dirname $1) echo upload $1 cd /data/www/grognon/ ftp -in ftp.arad.free.fr << FIN user username cd $dn lcd $dn put $bn bye FIN
L'arborescence est supposée être celle de Qlam
Racine : *.html
Racine/css : *.css
Racine/img : *.img
...
#!/bin/bash cd /data/local/ ftp -inv ftp.server.net<<FIN user grognon mput *.html lcd qlm cd qlm mput *.qlm cd ../css lcd ../css mput *.css cd ../img lcd ../img mput *.* cd ../doc lcd ../doc mput *.* cd ../script lcd ../script mput *.js bye FIN
$ amixer set -c 0 Bepp 80% unmute $ amixer set -c 0 Beep mute