User Tools

Site Tools


informatique:linux:bash

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:linux:bash [2015/07/20 14:28] pteuinformatique:linux:bash [2023/01/09 10:52] (current) – [-e] pteu
Line 1: Line 1:
 ======Bash====== ======Bash======
  
-**Bash** est un interpréteur de commande, un "shell". Il possède beaucoup de caractéristiques et fonctions communes avec ''sh'' ou ''zsh''.+{{:informatique:linux:bash_logo.png?nolink&200 |}}
  
-Pour la partie programmation et les variablesvoir la page [[informatique:linux:programmation_shell|Programmation Shell]].+**Bash** est un interpréteur de commande, un "shell". Il possède beaucoup de caractéristiques et fonctions communes avec ''sh'', ''ksh''''zsh'' ou plus largement ''*sh''.
  
 +Cette page se concentrera sur la prise en main de **bash**, sa configuration, ses raccourcis clavier, les enchaînements de commandes et quelques tips ; pour la partie programmation/scripting et variables, voir la page [[informatique:linux:programmation_shell|Programmation Shell]].
  
-=====Raccourcis===== 
  
-  * ''ctrl+d'' pour se délogger +=====Raccourcis clavier=====
-  * ''ctrl+a'' début de ligne +
-  * ''ctrl+e'' fin de ligne +
-  * ''ctrl+l'' effacer l'écran (clear) +
-  * ''ctrl+s'' masque la saisie clavier +
-  * ''ctrl+q'' pour revenir +
-  * ''ctrl+u'' efface tout à gauche du curseur +
-  * ''ctrl+k'' efface tout à doite du curseur +
-  * ''ctrl+w'' efface le mot à gauche du curseur +
-  * ''ctrl+r'' pour faire des recherches dans l'historique +
-  * ''ctrl+h'' efface le caractère à gauche du curseur (backspace) +
-  * ''ctrl+flèche droite ou gauche'' pour se déplacer d'un mot à l'autre dans un texte+
  
-  * ''ctrl+c'' envoie un SIGINT au processus en cours +====Généraux====
-  * ''ctrl+z'' suspent le processus courant (cf ''fg'' et ''bg'')  +
-  * ''ctrl+alt+-'' ou ''ctrl+alt++'' permet de changer la résolution de X +
-  * ''ctrl+alt+Fn'' change de terminal virtuel (avec n de 1 à 8) +
-  * ''ctrl+alt+backspace'' ferme la session graphique +
-  * ''ctrl+alt+suppr'' la pluspart du temps, sert à rebooter+
  
-  * ''alt+u'' et ''alt+l'' : passe, respectivement, en majuscules (Uppercase) et minuscules (Lowercasele texte suivant le curseur+  * ''Ctrl+d'' pour se délogguer 
 +  * ''Ctrl+l'' effacer l'écran (=''clear''
 +  * ''Ctrl+s'' masque la saisie clavier 
 +  * ''Ctrl+q'' pour revenir 
 +  * ''Ctrl+c'' envoie un SIGINT au processus en cours 
 +  * ''Ctrl+z'' suspend (passe en backgroundle processus courant (voir commandes ''fg'' et ''bg'')  
 +  * ''Ctrl+alt+-'' ou ''Ctrl+alt++'' permet de changer la résolution de X 
 +  * ''Ctrl+alt+Fn'' change de terminal virtuel (avec n de 1 à 8) 
 +  * ''Ctrl+alt+backspace'' ferme la session graphique 
 +  * ''Ctrl+alt+suppr'' la plupart du temps, sert à rebooter
  
 +====Déplacement curseur====
 +
 +  * ''Ctrl+a'' place le curseur en début de ligne
 +  * ''Ctrl+e'' place le curseur en fin de ligne
 +  * ''Ctrl+flèche droite ou gauche'' pour se déplacer de mot en mot sur la ligne
   * ''maj+pageup'' ou ''maj+pagedown'' faire défiler la console   * ''maj+pageup'' ou ''maj+pagedown'' faire défiler la console
-  * ''esc+.'' pour rapeller le premier argument de la dernière commande + 
-  * ''esc+@'' pour complèter les //hostnames// +====Édition de la ligne==== 
-  * ''esc+$'' pour complèter les variables + 
-  * ''ctrl+r'' //reverse search// : recherche d'une commande précédemment saisie ; ''ctrl+R'' permet de faire défiler en cas de réponses multiples +  * ''Ctrl+u'' efface toute la ligne à gauche du curseur 
-  * ''!motif'' permet de lancer la dernière commande saisie commançant par //motif// +  * ''Ctrl+k'' efface toute la ligne à droite du curseur 
-  * ''!!'' lancer la dernière commande+  * ''Ctrl+w'' efface le mot à gauche du curseur 
 +  * ''Esc+d'' efface le mot à droite du curseur 
 +  * ''Ctrl+h'' efface le caractère à gauche du curseur (=backspace) 
 +  * ''alt+u'' et ''alt+l'' : passe, respectivement, en majuscules (Uppercase) et minuscules (Lowercase) le texte suivant le curseur jusqu'à la fin du mot 
 +  * ''Ctrl+x'' ''Ctrl+e'' : copie la ligne courante dans l'étiteur de texte par défaut, pour l'éditer, puis l'exécuter quand on quittera l'éditeur 
 + 
 +====Rappels et substitutions==== 
 + 
 +  * ''Ctrl+r'' //reverse-i-search// : recherche d'une commande dans l'historique à nouveau ''Ctrl+r'' permet de faire défiler les résultats en cas de réponses multiples ; ''Ctrl+s'' permet de revenir au résultat précédent. (NB : certain terminaux utilisent déjà la séquence ''Ctrl+S'' ; pour la désactiver, insérer ''stty -xion'' dans votre ''.bash_profile'' ou ''.bashrc''. Quand le prompt contient déjà une commande, Ctrl+r permet de rechercher et se rendre à l'endroit du motif : ''bla bli blu'' ''Ctrl+r'' ''bli'' permet de positionner le curseur sur "bli", très pratique quand la ligne de commande est longue ! 
 +  * ''Esc+@'' pour compléter les //hostnames// 
 +  * ''Esc+$'' pour compléter les variables 
 +  * ''Esc+.'' affiche le dernier argument de la dernière commande 
 +  * ''Esc+#'' commente la ligne courante et annule la commande. Ca permet de la conserver dans l'historique sans l'avoir exécutée, pour la rappeler plus tard (c'est utile quand il nous manque une info en plein milieu de lécriture de la ligne) 
 +  * ''!motif'' permet de lancer la dernière commande saisie commençant par //motif// 
 +  * ''!!'' (re)lancer la dernière commande
   * ''!$'' le dernier argument de la dernière commande   * ''!$'' le dernier argument de la dernière commande
-  * ''^foo^bar'' lancer la dernière commande en remplaçant "foo" par "bar". Pour supprimer "foo" : ''^foo'' tout court.+  * ''^foo^bar'' relancer la dernière commande en remplaçant la première occurrence de "foo" par "bar". Pour supprimer "foo" : ''^foo'' tout court
 +  * ''!!:gs/foo/bar'' relance la dernière commande en remplaçant toutes les occurrences de "foo" par "bar".
  
-  * ''`<cmd>`'' les quotes inversés servent à lancer une commande et afficher le résultat. On peut s'en servir pour utiliser le résultat d'une commande en tant que paramètre d'une autre : ''ls -l `which vim`'' +=====Syntaxe===== 
-  * ''&'' permet de lancer une commande en tâche de fond + 
-  * ''<cmd1>;<cmd2>'' permet de lancer //<cmd1>// puis //<cmd2>// sans condition +  * ''`<cmd>`'' les quotes inversés servent à lancer une commande et afficher le résultat. On peut s'en servir pour utiliser le résultat d'une commande en tant que paramètre d'une autre : ''ls -l `which vim`''. Cet usage est aujourd'hui déprécié et remplacé par ''$(commande)'', qui fait pareil. 
-  * ''<cmd1>&&<cmd2>'' permet de lancer //<cmd1>//, et //<cmd2>// uniquement si //<cmd1>// renvoie //true// se termine correctement+  * ''&'' suffixer une commande par ''&'' permet de la lancer en tâche de fond 
 +  * ''<cmd1>;<cmd2>'' permet de lancer //<cmd1>// puis //<cmd2>// sans condition, sur une même ligne (le '';'' remplace le retour chariot) 
 +  * ''<cmd1>&&<cmd2>'' permet de lancer //<cmd1>//, puis //<cmd2>// uniquement si //<cmd1>// renvoie //true// (se termine correctement)
   * ''<cmd1>||<cmd2>'' lancer //<cmd1>//, puis //<cmd2>// uniquement si //<cmd1>// renvoie //false//   * ''<cmd1>||<cmd2>'' lancer //<cmd1>//, puis //<cmd2>// uniquement si //<cmd1>// renvoie //false//
-  * ''<cmd1>|<cmd2>'' redirige la sortie de //<cmd1>// vers l'entrée de //<cmd2>// +  * ''<cmd1>|<cmd2>'' redirige la sortie standard de //<cmd1>// vers l'entrée standard de //<cmd2>// 
-  * ''<cmd1>|xargs <cmd2>'' redirige la sortie de //<cmd1>// dans les paramètres de //<cmd2>//+  * ''<cmd1>|xargs <cmd2>'' convertit la sortie de //<cmd1>// en paramètres de //<cmd2>//
   * ''<cmd> > <fic>'' redirige la sortie (STDOUT) de //<cmd>// vers le fichier //<fic>// (le fichier est vidé (>))   * ''<cmd> > <fic>'' redirige la sortie (STDOUT) de //<cmd>// vers le fichier //<fic>// (le fichier est vidé (>))
-  * ''<cmd> >> <fic>'' redirige la sortie de //<cmd>// à la fin du fichier //<fic>// (>>)  +  * ''<cmd> <nowiki>>></nowiki> <fic>'' redirige la sortie de //<cmd>// à la fin du fichier //<fic>// (<nowiki>>></nowiki>)  
-  * ''<cmd> 2><fic>'' redirige la sortie d'erreur (STDERR) vers //<fic>// +  * ''<cmd> 2> <fic>'' redirige la sortie d'erreur (STDERR) vers //<fic>// 
-On trouvera par exemple ''<cmd> >/dev/null 2>/dev/null'' pour que //<cmd>// n'affiche rien à l'écran (ni la sortie standart ni la sortie d'erreur).  +On trouvera par exemple ''<cmd> >/dev/null 2>/dev/null'' pour que //<cmd>// n'affiche rien à l'écran (ni la sortie standard ni la sortie d'erreur).  
-  * ''<cmd> 2>&1'' redirige la sortie d'erreur vers la sortie standart (**&1**) +  * ''<cmd> 2> &1'' redirige la sortie d'erreur vers la sortie standard (**&1**) 
-  * ''<cmd> < <fic>'' redirige le contenu de //<fic>// sur l'entrée standart de //<cmd>// +  * ''<cmd> < <fic>'' redirige le contenu de //<fic>// sur l'entrée standard de //<cmd>// 
-  * Les doubles quotes ''"'' n'interprètent que les caractères spéciaux **$**, **\** et **'** (quote) +  * Les apostrophes (quotes) permettant de définir une chaîne de caractère contenant des espaces : 
-  Les simples quotes ''''' n'interprètent aucun caractère spécial+    * les doubles quotes ''"'' interprètent les caractères spéciaux **$**, **\** et **'** (quote) 
 +    les simples quotes ''''' n'interprètent aucun caractère spécial
   * Les caractères spéciaux sont : ''& ~ ; \ " ' ` # ( ) [ ] | $ * ! ? < >''   * Les caractères spéciaux sont : ''& ~ ; \ " ' ` # ( ) [ ] | $ * ! ? < >''
  
-=====Debugger un script=====+=====Variables d'environnement=====
  
-Pour débugger un script, ajouter dans le script : +Elle sont persistantes à un terminal ; on peut les lister avec la commande ''env''. Voici une liste non exhaustive de variables avec leur utilité : 
-  * ''set -x'' à partir de l'endroit où l'on veut tracer le script à l'exécution +  * HOME : contient le chemin de la home de l'utilisateur 
-  * ''set +x'' à partir de l'endroit où l'on veut cesser de tracer le script +  * HOSTNAME : le nom de la machine 
 +  * PATH : contient la liste des répertoires dans lesquels le terminal ira rechercher un exécutable automatiquement (sans avoir besoin de spécifier le chemin complet) 
 +  * PWD : contient le répertoire courant 
 +  * PROMPT_COMMAND : le contenu de cette variable est exécuté à chaque affichage du prompt 
 +  * USER, USERNAME ou LOGNAME : contient le login de l'utilisateur
  
-Autre méthode : lancer le script dans nouveau Shell avec : ''sh -x script''+=====Options=====
  
-Encore une autre méthode : àa la première ligne du script, rajouter "-v" au **shebang**, par exemple :+Les options de bash peuvent se modifier au lancement sous forme de paramètre (''bash -e'' par ex.) ou dans un script via le mot-clé ''set''. Elles permettent de tuner le shell en modifiant son comportement par défaut. 
 + 
 +====-e==== 
 + 
 +Avec l'option ''-e'', bash se termine dès qu'une commande se termine avec un code de retour en erreur (différent de 0). Impossible a activer dans un shell, mais pratique pour éviter que des erreurs non prévues dans un script ne provoquent de gros problèmes. 
 + 
 +Cependant cela ne marche pas correctement avec certaines commandes comme grep, qui retourne 1 s'il ne matche pas (ce qui n'est certainement pas une erreur qui vaut le coup que l'on arrête le script). Alors, comme indiqué dans [[https://stackoverflow.com/questions/9952177/whats-the-meaning-of-the-parameter-e-for-bash-shell-command-line/9952249|ce thread de stackoverflow]] : 
 +    * soit on gère l'erreur avec un ''grep TRUC machin.txt || :'' : on gère le retour pour que bash ne la "voit" pas (si aucune action n'est nécessaire : ''grep TRUC machin.txt || true'' suffit ; cependant ce n'est pas idéal, car on masque tous les codes d'erreur (pas que 1). 
 +    * soit, plus compliqué mais plus pertinent, on créé une fonction "grep" dans notre script pour surcharger la commande système grep, qui va filtrer les codes de retour = 1 (motif non trouvé) mais pas les autres, que bash pourra interpréter (erreur=2 : fichier inexistant par exemple). 
 +<code bash> 
 +#!/bin/bash -e 
 +function grep () { 
 +    local exit_code 
 +    command grep "$@" || exit_code=$? 
 +    return $(( exit_code == 1 ? 0 : exit_code )) 
 +
 +grep PATTERN FILE     # won't kill script if no matches are found 
 +</code> 
 +Rappel : ''command'' permet de lancer la commande qui suit ("grep" ici) parmi les commandes internes et le contenu du $PATH uniquement, afin que notre fonction ne devienne pas récursive ! 
 + 
 +====-x==== 
 + 
 +Pour le débugger un script, ajouter dans le script : 
 +  * ''set -x'' à partir de l'endroit où l'on veut tracer le script 
 +  * ''set +x'' à partir de l'endroit où l'on veut cesser de tracer le script  
 +Autre méthode : lancer le script dans nouveau shell avec : ''bash -x script'' 
 + 
 +Encore une autre méthode : à la première ligne du script, rajouter "-v" au **shebang**, par exemple :
 <code> <code>
 #!/bin/sh -v #!/bin/sh -v
 </code> </code>
 +
 +====-n====
 +
 +Pour vérifier la syntaxe d'un script sans le lancer (//run-dry//) : ''set -n'' (ou ''bash -n mon_script.sh'')
 +
 +====-o pipefail====
 +
 +Par défaut, après une suite de pipe (''|'') bash ne retient que le code de retour de la dernière commande (la plus à droite). En activant l'option pipefail, bash va renvoyer le dernier code de retour __en erreur__ dans la suite de pipes, ou "0" si toutes les commandes se terminent correctement.
 +
 +Combiné avec ''-e'', permet de terminer le script courant en cas de code d'erreur non traitée, même celles "cachées" par un pipe.
 +
 +Par exemple:
 +<code bash>
 +#!/bin/bash
 +#set -eo pipefail
 +foo | echo test1
 +echo test2
 +#test1
 +#line 3: foo: command not found
 +#test2
 +</code>
 +
 +<code bash>
 +#!/bin/bash
 +set -eo pipefail
 +foo | echo test1
 +echo test2
 +#test1
 +#line 3: foo: command not found
 +</code>
 +
 +====-u====
 +
 +Avec cette option, bash va générer une erreur et stopper son exécution si une variable non déclarée est utilisée. Pour éviter cela, on utilisera la notation ''${var-default}'' pour s'assurer que si $var n'est pas définie, on lui attribuera la valeur "default" et bash ne génèrera pas d'erreur.
  
 =====.bashrc===== =====.bashrc=====
Line 188: Line 269:
 # pour restaurer le mode "emacs" # pour restaurer le mode "emacs"
 set -o emacs set -o emacs
 +</code>
 +
 +====Changer le titre====
 +
 +Pour changer le titre de la fenêtre de terminal, une commande passe-partout : ''echo -ne "\033]0;Nouveau titre\007"''. On peut en faire une fonction pour qu'il soit plus utilisable sous la forme : ''titreterm "Nouveau titre"''
 +<code bash>
 +vi ~/.bashrc
 +
 +# modifie le titre de la fenêtre du terminal courant
 +function titreterm {
 +# usage : titreterm Titre
 +
 +if [[ $# -eq 1 && -n $1 ]]
 +then
 +echo -ne "\033]0;$1\007"
 +fi
 +}
 +</code>
 +
 +====Historique des commandes====
 +
 +La commande ''history'' permet d'afficher la liste des dernières commandes exécutées dans le terminal. Pour ajouter un timestamp (horodatage) on peut jouer sur les variables suivantes (à ajouter dans votre ''~/.bashrc'' ou à exporter) :
 +<code bash>
 +# ajouter l'horodatage
 +HISTTIMEFORMAT="%Y/%m/%d_%H:%M:%S "
 +# détermine le nombre de commandes max enregistrées
 +HISTSIZE=20000
 +# pour supprimer les doublons
 +HISTCONTROL=ignoredups
 +</code>
 +
 +Pour réafficher la dernière commande, on peut juste appuyer sur la touche de rappel de la dernière commande ("flèche haut") ; en appuyant une seconde fois on a l'avant-dernière, etc... OU sinon utiliser la commande ''!'' :
 +<code bash>
 +# relancer la dernière commande
 +!!
 +# relancer de la dernière commande commençant par "cd"
 +!cd
 +# relancer la 10ème commande de l'historique
 +!10
 +# relancer l'anvat-dernière commande
 +!-2
 +# relancer la dernière commande contenant la chaîne "home"
 +!?home
 +# relancer la dernière commande en remplaçant "toto" par "tata"
 +^toto^tata^
 +</code>
 +
 +Il existe un outil pour faire des recherches en "temps réel" dans l'historique ; pour l'invoquer on utilise ''Ctrl+R''. Le prompt est renommé en ''(reverse-i-search)`': '' et on peut saisir une chaîne de caractères ; l'outil va automatiquement rappeler la dernière commande saisie matchant cette chaîne.
 +
 +====PS1 avancé====
 +
 +On peut utiliser la variable ''PROMPT_COMMAND'' pour exécuter un script à chaque affichage du prompt, afin de l'adapter au contexte.
 +
 +Voici un exemple d'utilisation pour faire varier la couleur de l'utilisateur, la machine et afficher le code de retour de la dernière commande :
 +<code bash>
 +#
 +# à insérer dans le .bashrc ou .bash_profile
 +# penser à commenter la ligne "PS1=..."
 +#
 +RED="\[\033[1;31m\]"
 +GREEN="\[\033[0;32m\]"
 +YELLOW="\[\033[0;33m\]"
 +BLUE="\[\033[0;34m\]"
 +GRAY_BG="\[\033[0;30;47m\]"
 +OFF="\[\033[m\]"
 +TIME="\D{%d%m_%H%M%S}"
 +
 +function make_PS1 {
 +
 +# définition couleur "$" en fonction du code de retour précédente commande
 +EXITSTATUS="$?"
 +if [ "${EXITSTATUS}" -eq 0 ]
 +then
 +   RET_CMD=${GREEN}
 +else
 +   RET_CMD=${RED}
 +fi
 +
 +# définition couleur utilisateur
 +case $(id -u -n) in
 +   dude)
 +      USR_COL=${GREEN}
 +      ;;
 +   dude-adm)
 +      USR_COL=${BLUE}
 +      ;;
 +   root)
 +      USR_COL=${RED}
 +      ;;
 +   *)
 +      USR_COL=${YELLOW}
 +      ;;
 +esac
 +
 +# définition de la couleur de la machine
 +case $(hostname) in
 +   pc-perso)
 +      HOST_COL=${BLUE}
 +      ;;
 +   serveur-prod)
 +      HOST_COL=${RED}
 +      ;;
 +   *)
 +      HOST_COL=${YELLOW}
 +      ;;
 +esac
 +
 +PS1="${GRAY_BG}${TIME}${OFF} ${USR_COL}\u${OFF}@${HOST_COL}\h${OFF}:${YELLOW}\W${RET_CMD} \$${OFF} "
 +}
 +PROMPT_COMMAND=make_PS1
 +</code>
 +
 +Ce qui donne : ''1710_164245 dude@pc-perso:home $ '' avec des couleurs qui évoluent avec le contexte.
 +
 +
 +====Afficher n fois un caractère====
 +
 +Afficher $N fois le caractère $C :
 +<code bash>
 +N=10
 +C=#
 +printf "%0.s${C}" $(seq 1 ${N})
 +</code>
 +
 +====Désactiver l'alias====
 +
 +Pour afficher si une commande est un alias, on peut faire : ''alias <cmd>'', par exemple :
 +<code bash>
 +alias ls
 + alias ls='ls --color=auto'
 +</code>
 +
 +Et si on souhaite la lancer sans l'alias (''ls'' tout court), on peut utiliser la syntaxe '''<cmd><nowiki>'</nowiki>'' ou ''\<cmd>'' :
 +<code bash>
 +'ls'
 +# ou
 +\ls
 +</code>
 +=====Liens/Ressources=====
 +
 +  * [[https://github.com/jlevy/the-art-of-command-line|The Art of Command Line]] (jlevy's GitHub)
 +  * [[https://betterdev.blog/minimal-safe-bash-script-template/|Minimal safe Bash script template]] (betterdev.blog)
 +Je pose ledit template ici, mais le lien ci-dessous vaut le détour car il explique chaque best-practice en détail !
 +<code bash>
 +#!/usr/bin/env bash
 +
 +set -Eeuo pipefail
 +trap cleanup SIGINT SIGTERM ERR EXIT
 +
 +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
 +
 +usage() {
 +  cat << EOF # remove the space between << and EOF, this is due to web plugin issue
 +Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-f] -p param_value arg1 [arg2...]
 +
 +Script description here.
 +
 +Available options:
 +
 +-h, --help      Print this help and exit
 +-v, --verbose   Print script debug info
 +-f, --flag      Some flag description
 +-p, --param     Some param description
 +EOF
 +  exit
 +}
 +
 +cleanup() {
 +  trap - SIGINT SIGTERM ERR EXIT
 +  # script cleanup here
 +}
 +
 +setup_colors() {
 +  if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then
 +    NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m'
 +  else
 +    NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW=''
 +  fi
 +}
 +
 +msg() {
 +  echo >&2 -e "${1-}"
 +}
 +
 +die() {
 +  local msg=$1
 +  local code=${2-1} # default exit status 1
 +  msg "$msg"
 +  exit "$code"
 +}
 +
 +parse_params() {
 +  # default values of variables set from params
 +  flag=0
 +  param=''
 +
 +  while :; do
 +    case "${1-}" in
 +    -h | --help) usage ;;
 +    -v | --verbose) set -x ;;
 +    --no-color) NO_COLOR=1 ;;
 +    -f | --flag) flag=1 ;; # example flag
 +    -p | --param) # example named parameter
 +      param="${2-}"
 +      shift
 +      ;;
 +    -?*) die "Unknown option: $1" ;;
 +    *) break ;;
 +    esac
 +    shift
 +  done
 +
 +  args=("$@")
 +
 +  # check required params and arguments
 +  [[ -z "${param-}" ]] && die "Missing required parameter: param"
 +  [[ ${#args[@]} -eq 0 ]] && die "Missing script arguments"
 +
 +  return 0
 +}
 +
 +parse_params "$@"
 +setup_colors
 +
 +# script logic here
 +
 +msg "${RED}Read parameters:${NOFORMAT}"
 +msg "- flag: ${flag}"
 +msg "- param: ${param}"
 +msg "- arguments: ${args[*]-}"
 </code> </code>
informatique/linux/bash.1437402485.txt.gz · Last modified: 2015/07/20 14:28 by pteu