Creation: 15 fevrier 2006
Mise à jour: 8 septembre 2011
Version: 1.2
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2006-2011 Jean-Louis BICQUELET-SALA�N
shell
Frequently-Asked Questions
Le shell d'unix et de linux peut être plein de surprise. La présente FAQ correspond aux versions courrantes bourn shell, korn shell etbash.
Pour plus d'information au sujet de cette faq, contactez Jean-Louis BICQUELET
FAQ Revised: dimanche 08 septembre 2013 22:18:46
Table of Contents
- 1. shell
- 2. string
- 3. date
- 4. repertoires
- 5. fichiers
- 6. commandes utiles
- 7. calcul
1. shell
- 1.1. Comment parser la ligne de commande ?
- Il existe plusieures manièegrave;res de faire. La façon la plus simple est celle-ci:
#!/bin/sh
HELP_=false
MAN_=false
while getopts hm o
do case $o in
h) HELP_=true;;
m) MAN_=true;;
[?]) print >&2 "Usage: $0 [-s] [-d seplist] file ..."
exit 1;;
esac
done
echo $HELP_
echo $MAN_
shift $OPTIND-1
echo $#
- 1.2. Une simple boucle for
#!/bin/bash
var=0
LIMITE=10
while [ "$var" -lt "$LIMITE" ]
do
echo "$var "
var=`expr $var + 1`
done
- 1.3. Véeacute;rification d'une entréeacute;e oui/non
if [ -f $outfile ]
then
echo "Output file [$outfile] already exists"
echo "Okay to overwrite? ( y/n ) : \c"
read answer
if [ "$answer" = "n" ] || [ "$answer" = "N" ]
then
echo "Aborting"
exit
fi
fi
- 1.4. Comment réeacute;cupéeacute;rer le réeacute;sultat d'un calcul dans une variable ?
a=`bc << quit
24544 / 1024
quit
`
- 1.5. comment afficher une trace d'éeacute;tape datéeacute;e ?
printf "%-7s - %02d - %-10s - %-10s\n" 'STEP01' '01' `date +%d/%m/%Y` `date +%HH%MM%SS`
2. string
- 2.1. comment chercher une chaine ddans une sous chaine?
- La commande expr dispose d'un certain nombre d'outils dont celui-ci:
chaineZ=abcABC123ABCabc
echo `expr index "$chaineZ" C12`
3. date
- 3.1. Comment générer un nom avec une date?
- Pour obtenir un format year/month/day:
(d=`date +%y%m%d`;echo "machine_$d.nmon")
i
Pour un format year/nb of day since the beginning of the year
(d=`date +%Y%j`;n=`uname` -u;echo "`$n_$d.nmon")
- 3.2. Comment écrire l'heure ?
printf "%s;" "$(date "+%Y/%m/%d %H:%M:%S")"
- 3.3. comment obtenir un timestamp en fonction d'une date et d'une heure?
a=`perl -e "use Time::Local;print timelocal(0,10,9,13,8,2006);"`
- 3.4. comment obtenir date et une heure à partir d'un timestamp ?
- En supposant la variable $a correctement remplie :
perl -e "use Time::Local;print scalar localtime($a);"
,,__
.. .. / o._) .---.
/--'/--\ \-'|| .----. .' '.
/ \_/ / | .' '..' '-.
.'\ \__\ __.'.' .' ._
)\ | )\ | _.'
// \\ // \\
||_ \\|_ \\_
'--' '--'' '--'
- 3.5. comment obtenir le calendier d'un mois donné ?
#cal 6 2007
June 2007
Sun Mon Tue Wed Thu Fri Sat
1 2 22
3 4 5 6 7 8 9 23
10 11 12 13 14 15 16 24
17 18 19 20 21 22 23 25
24 25 26 27 28 29 30 26
- cal retourne le mois courrant
- cal 2002 retourne le calendrier pour 2002
- 3.6. comment afficher le calendrier en commencant par le lundi ?
- cal | awk 'NR=1 { print $0} NR>1 {print $2"\t"$3"\t"$4\t"$5\t"$6\t"$7\t"$1}'
4. repertoires
- 4.1. comment lister uniquement les réeacute;pertoires?
ls -d */
- 4.2. Comment obtenir un listing des réeacute;pertoires réeacute;cursif?
- Une des solutions suivantes doit correspondre à aacute; vos besoins:
- ls -R (toutes les versions de "ls" n'ont pas l'option -R)
- find . -print (doit fonctionner partout)
- du -a . (affiche et le nom et le taille)
Si vous recherchez un pattern qui recherche tous les fichiers .c dans le réeacute;pertoire et les sous réeacute;pertoires vous pouvez utiliser:
% some-command `find . -name '*.c' -print`
5. fichiers
- 5.1. Comment véeacute;rifier qu'un fichier existe ?
if [ ! -f $FILE ]; then
echo "File \"$FILE\" does not exist."
exit $E_BADARGS
fi
- 5.2. Comment renommer les fichiers "*.foo" en "*.bar", ou changer le nom des fichiers en minuscules ?
for f in *.foo; do
base=`basename $f .foo`
mv $f $base.bar
done
- 5.3. Comment extraire tous les fichiers d'un réeacute;pertoire ?
ls -R | sed -e 's/://'
- 5.4. Comment lire un fichier ligne à aacute; ligne?
Utilisez exec avec une redirection vers un file descriptor (de 3 a 99), combinéeacute; avec read -unumber var.
- 5.5. comment accéeacute;der à aacute; un réeacute;pertoire commencant par -?
cd ./-1701931229
- 5.6. comment effacer les fichiers en demande confirmation à aacute; chaque fois?
rm -i list*
rm: Remove list_cat? n
rm: Remove list_? y
rm: Remove list_quest? n
6. commandes utiles
- 6.1. comment afficher un fichier de texte ou un script?
cat fichier
- 6.2. comment afficher un fichier de texte en supprimant les lignes blanches en double?
cat -s fichier
- 6.3. comment afficher un fichier avec un nombre de ligne?
#cat -b script
1 #!/usr/bin/ksh -x
2 #
3 # Script
4 #
5 ## variables #################################################################
6 # Global Variables
7 log="/tmp/log"
7. calcul
- 7.1. comment faire un calcul complexe en shell ?
a=56
perl -e "print `sin($a) * 3;"
-1.56465300626074 c
ou encore
b=`perl -e "print `sin($a) * 3;"`
Copyright (c) 2004-2013 Jean-Louis BICQUELET
This list of questions and answers was generated by
makefaq.