User Tools

Site Tools


informatique:linux:bash

This is an old revision of the document!


Bash

Bash est un interpréteur de commande, un “shell”. Il possède beaucoup de caractéristiques et fonctions communes avec sh ou zsh.

Pour la partie programmation et les variables, voir la page Programmation Shell.

Raccourcis

  • ctrl+d pour se délogger
  • 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
  • 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 (Lowercase) le texte suivant le curseur
  • 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
  • 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
  • !motif permet de lancer la dernière commande saisie commançant par motif
  • !! lancer 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.
  • `<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`
  • & permet de lancer une commande en tâche de fond
  • <cmd1>;<cmd2> permet de lancer <cmd1> puis <cmd2> sans condition
  • <cmd1>&&<cmd2> permet de lancer <cmd1>, et <cmd2> uniquement si <cmd1> renvoie true se termine correctement
  • <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>|xargs <cmd2> redirige la sortie de <cmd1> dans les 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 de <cmd> à la fin du fichier <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).

  • <cmd> 2>&1 redirige la sortie d'erreur vers la sortie standart (&1)
  • <cmd> < <fic> redirige le contenu de <fic> sur l'entrée standart de <cmd>
  • Les doubles quotes n'interprètent que les caractères spéciaux $, \ et ' (quote)
  • Les simples quotes ' n'interprètent aucun caractère spécial
  • Les caractères spéciaux sont : & ~ ; \ ” ' ` # ( ) [ ] | $ * ! ? < >

Debugger un script

Pour débugger un script, ajouter dans le script :

  • set -x à partir de l'endroit où l'on veut tracer le script à l'exécution
  • 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 : sh -x script

Encore une autre méthode : àa la première ligne du script, rajouter “-v” au shebang, par exemple :

#!/bin/sh -v

.bashrc

Le fichier .bashrc contient des script de démarrage et des alias ; il est chargé par défaut lorsqu'on lance bash ; voici mon exemple de .bashrc :

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
 
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
 
# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups
 
export EDITOR=vim
 
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
 
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"
 
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
 
# set a fancy prompt (non-color, unless we know we "want" color)
#case "$TERM" in
#xterm-color)
#    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#    ;;
#*)
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#    ;;
#esac
 
# Comment in the above and uncomment this below for a color prompt
PS1='\[\e[0;30;47m\]$(date +"%H:%M")\[\e[0;33m\] \u@\[\e[0;31m\]\h\[\e[0m\]:\[\e[0;32m\]\W \[\e[0m\]'
 
# If this is an xterm set the title to user@host:dir
#case "$TERM" in
#xterm*|rxvt*)
#    PROMPT_COMMAND='echo -ne "\033]0;${USER}@\e[0;31${HOSTNAME}: ${PWD/$HOME/~}\007"'
#    ;;
#*)
#    ;;
#esac
 
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
 
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
 
# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=auto'
    #alias dir='ls --color=auto --format=vertical'
    #alias vdir='ls --color=auto --format=long'
fi
 
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
 
# droits par defaut des fichiers crees par cet utilisateur
umask 027
 
# pour avoir axx a des cmd telles que ifconfig
export PATH=$PATH:/sbin
 
# (20090515) afficher la date et l'heure dans l'historique des commandes
HISTTIMEFORMAT="%m/%d_%H:%M:%S "
 
# (20090522) changer la taille de l'historique (cmd history) ; 1000 par défaut
HISTSIZE=10000
 
#echo "---"
# affiche une ligne de definition
#/home/dude/scripts/aff_lig_def.sh /mnt/data/backup/mesdocs/defs.txt /mnt/data/backup/mesdocs/en.txt
#echo "---"
w
 
# (20100702) utiliser most pour afficher les pages de man
export MANPAGER='most'
 
### fonctions
#function test {
#	echo $1;
#}
 
### 20110302 append .bashrc ymir et ymir2 (ubuntu 10.10)
# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

Tips

Changer le mode d'édition

Par défaut le mode d'édition est de type “emacs-like”, c'est-à-dire que le clavier répond comme sous emac. Pour les aficionados de vi, on peut changer ce mode comme sous vi. On aura donc le mode commande, édition, etc…

set -o vi
 
# pour restaurer le mode "emacs"
set -o emacs
informatique/linux/bash.1437402485.txt.gz · Last modified: 2015/07/20 14:28 by pteu