{{tag>Brouillon bash }}
= Bash astuces
Voir :
* [[http://www.thegeekstuff.com/2011/08/bash-history-expansion/|15 Linux Bash History Expansion Examples You Should Know]]
* https://scalastic.io/bash-functional-programming/
== Check syntax avec shellcheck
Voir aussi :
* https://github.com/oxsecurity/megalinter
shellcheck monscript.sh
Si faux positif
# shellcheck disable=SC2086
rsync $RSYNC_OPT "${PART}/" "${PART_TMP}/"
$ shellcheck plop.sh
In mkiso-debian.sh line 56:
source "$FIC_PROPERTIES"
^-- SC1090: Can't follow non-constant source. Use a directive to specify location.
Solution
Ajouter en commentaire ''shellcheck source=''
''plop.sh''
# shellcheck source=vars/vm-deb10.var
source "$FIC_PROPERTIES"
puis
shellcheck -x plop.sh
''.shellcheckrc''
external-sources=true
shell=bash
color=always
== Variables
Alternative à **eval** pour les variables
Meta variables
$ a=1
$ b=2
$ meta_var="a"
$ echo ${!meta_var}
1
Appel de variable
$ B=2
$ KEY=B
$ echo ${KEY}
B
$ echo ${!KEY}
2
Déclaration / affectation de variables dynamiques
$ declare $KEY=12
$ echo ${!KEY}
12
Ou encore
K=V
declare -n V2=K
# Ce qui revient à :
# V2="$K"
$ LETTRE=ALPHA
$ ALPHA=A
$ declare -n PLOP=$LETTRE
$ echo $PLOP
A
=== Linter
shfmt
https://github.com/mvdan/sh
~/go/bin/shfmt -i 4 -s -w plop.sh
Auto indent
vim
:set expandtab ts=4 sw=4 ai
:retab
bashate
pip3 install bashate
bashate file.sh
bashate -i E010,E011 file.sh file2.sh
=== Autres
''/etc/skel/.bash_logout''
/usr/bin/clear