éveloppement n'inclus pas les fichiers cachés :
<code bash>
# Le dossier courant contient 3 fichiers
# ... développement de '*'
echo *
fileA.txt fileB.txt
</code>
Ici on voit bien que lors du développement de '... permet de modifier ce comportement par défaut.
<code bash>
# Afficher la valeur de l'option
shopt dotg... és lors de la phase de globing
shopt -u dotglob
</code>
Lorsque **dotglob** est définie, le développeme
n (noexec) et le scrit à vérifier en paramètre:
<code bash>
bash -n monscript.sh
</code>
Le shell Bash peut être invoqué avec l'option **-x** pour activer l... ans le script seront affichées avant exécution.
<code bash>
#!/bin/bash -x
# Les commandes présentes da... ées
# Le shell est invoqué avec l'option xtrace
</code>
A tout moment dans un script on peut activer/dé
{{tag>dev bash code redirection}}
====== Bash : redirection des entrées/sorties ======
Pour un shell ... sé en listant le contenu de **''/proc/$$/fd''**
<code bash>
# Afficher les descripteurs ouverts pour le... yoann yoann 64 janv. 18 18:08 255 -> /dev/pts/3
</code>
Pour plus de détails à propos des descripteurs ... taire pointant sur le terminal de l'utilisateur.
<code bash>
# Redirige la sortie de echo dans le fichie
es sections du manuel (équivaut à ''man -k'').
<code bash>
apt-get install man-db manpages
</code>
Les pages du manuel sont installées sous **/usr/share/ma... uets contenant des pages de manuel généralistes:
<code bash>
apt-cache pkgnames manpages
</code>
<file>
manpages-es-extra
manpages-de-dev
manpages
manpages-d
essous devraient produire le même comportement:
<code bash>
$ ./mon_script -a -b -c
$ ./mon_script -abc... ba -c
$ ./mon_script --long-a --long-c --long-b
</code>
Les difficultés que pointe cet exemple:
* Ord... ts =====
**getopts** est une primitive de Bash:
<code>
type getopts
getopts est une primitive du shell
</code>
Utilisée avec les commandes **while** et **case
our convertir des données présentées en colonne:
<code bash>
echo $(cat data_in_column.txt)
</code>
===== tr =====
On peut remplacer les caractères NL par des espaces avec la commande **tr**:
<code bash>
$ cat data_in_column.txt | tr '\n' ' '
</code>
===== awk =====
Reformater à l'aide de la com
nhibition caractère sert à cela, on écrit donc:
<code bash>
repertoire=HOME
# première substitution
echo \${$repertoire}
${HOME}
</code>
Ensuite il faut refaire une autre évaluation po... t de faire l’exécution de la ligne de commande:
<code bash>
eval echo \${$repertoire}
/home/yoann
</code>
<note>
Cette opération en programmation s’appelle
{{tag>dev bash variable code snippet exemple guide howto}}
====== Bash : vérifier l’existence d'une va... consiste à utiliser la primitive **declare**:
<code bash>
# Retourne 0 si MAVAR existe
declare -p MAV... c l'alias typeset
typeset -p MAVAR &> /dev/null
</code>
Ci-dessous un exemple dans un if:
<code bash>
if $( declare -p MAVAR &> /dev/null ); then
echo "MAV
ut l'installer facilement à partir des sources.
<code bash>
apt-get install binutils
./configure
make... umask
# valeur attendue 0022
umask
make install
</code>
===== Documentation =====
La documentation est fournie au format textinfo:
<code bash>
info /usr/share/info/bashdb.info
</code>
===== Références =====
* https://bashdb.sourceforge.
s variables prédéfinies **ibase** et **obase**:
<code bash>
echo "obase=10; ibase=16; a=AC; print(a);" | bc
</code>
Ici on redéfinit **ibase** à 16 pour spécifier ...
===== Conversion du binaire en décimal =====
<code bash>
echo "obase=10; ibase=2; a=11111100011; print(a);" | bc
</code>
Ici on spécifie seulement que l'entrée est en b
Le reste est disponible via l'opérateur modulo.
<code bash>
# La fonction alea écrit sur la sortie sta... alea () {
echo $(( $RANDOM % ( $1 + 1 ) ))
}
</code>
<note>
On fait ici le choix d'écrire sur la sor... substitution de commande : **$( ... )**
</note>
<code bash>
n1=$( alea 100 )
n2=$( alea 33 )
echo $n1 $n2
</code>
é (échappé par '\') entre 2 guillemets simples:
<code>
# Cet exemple est syntaxiquement faux,
# Il cond... n par le shell
echo 'un exemple s\'il te plaît'
</code>
Les guillemets permettent d'inhiber le développ... ement des noms de fichiers/dossiers (globbing):
<code bash>
# Ici on utilise les guillemets pour éviter... noms par le shell
# c'est la commande find qui interprete
find . -type f -iname "*.sh" -print
</code>
{{tag>dev bash exemple code snippet guide howto}}
:TODO_DOCUPDATE:
====== Bash : vérifier le mode d'ex... ichier quelconque ''FD'' est lié à un terminal.
<code bash>
# Retourne vrai si le descripteur 0 (stdin)... ut) est lié au terminal donc à l'écran
[ -t 1 ]
</code>
===== Références =====
* https://serverfault
{{tag>bash exemple extrait guide how-to code snippet}}
====== Bash : vérifier les droits d'accès sur un... es droits d'accès au fichier sous forme octale:
<code bash>
# Le retour de la commande ls est adapté au... valeur peut être plus facilement exploitable dans un script
stat --format=%a /tmp/aFile.txt
600
</code>