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
Fichiers modifiés ces derniers jours
# aujourd'hui
find . -mtime -1
# les trois derniers jours
find . -mtime -3
Fichiers modifiés ces dernières heures
# la dernière heure
find . -mmin +60
# les 5 dernières heures 5*60 = 300
find . -mmin +300