Outils pour utilisateurs

Outils du site


tech:bash-read

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tech:bash-read [2025/05/28 11:55] Jean-Baptistetech:bash-read [2026/06/16 15:26] (Version actuelle) Jean-Baptiste
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{tag>Bash Script}}
 +
 +# Bash Read lire affecter plusieurs variables en une seul fois
 +
 +Voir aussi :
 +* Heredoc
 +
 +~~~
 +-r : Prevents backslash escapes from being interprete
 +
 +-t <seconds> : Timeout
 +
 +-n <max char> : Max char
 +
 +-s : Secret / Silent
 +
 +-p <Prompt> : Prompt
 +
 +-a : Array
 +~~~
 +
 +NOTE : Dans les scripts bash il est recommandé d'utiliser `read -r`
 +
 +Exemple :
 +
 +~~~bash
 +read a b c d <<< $(psql -U osiris -d osiris4 -At -c 'select urlbl,urlarbl,urlimport,urlarimport,urlventes,urlarventes,urlmessages,max(dateactivation),login,password,loginmlp,motdepassemlp from credentials pc join diffuseur pd using(groupeid) group by  urlbl,urlarbl,urlimport,urlarimport,urlventes,urlarventes,urlmessages,login,password,loginmlp,motdepassemlp limit 1' | sed -e 's/|/ /g')
 +~~~
 +
 +
 +Possible aussi d'utiliser mkfifo et changer [IFS](https://fr.wikipedia.org/wiki/Internal_Field_Separator)
 +
 +Autres liens :
 +* http://stackoverflow.com/questions/2746553/bash-script-read-values-from-stdin-pipe
 +* http://unix.stackexchange.com/questions/33858/bash-read-command-and-stdin-redirection
 +* http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/x13082.html
 +* http://superuser.com/questions/276531/clear-stdin-before-reading
 +
 +Changement de la variable IFS
 +~~~bash
 +old_IFS="$IFS"
 +export IFS=","
 +~~~
 +
 +Exemple 1
 +~~~bash
 +unset a b c
 +read a b c <<< "AA BB CC"
 +echo -e "a: $a\nb: $b\nc: $c"
 +~~~
 +
 +Exemple 2
 +~~~bash
 +unset a b c
 +IFS=',' read a b c <<< "AA,BB,CC"
 +echo -e "a: $a\nb: $b\nc: $c"
 +~~~
 +
 +Exemple 3 
 +~~~bash
 +unset a b c
 +mkfifo /tmp/fifo
 +echo "AA,BB,CC" > /tmp/fifo &amp;
 +IFS=',' read a b c < /tmp/fifo
 +echo -e "a: $a\nb: $b\nc: $c"
 +rm /tmp/fifo
 +~~~
 +
 +Autre - exemple while read
 +~~~bash
 +while IFS=$' \t\n' read ID NAME NOT_USED
 +do
 +        echo -e "\t $ID $NAME"
 +done < <(openstack image list -f value)
 +~~~
 +
 +## Autres exemples
 +
 +Trier des fichiers par ordre alphabétique à partir d'un champ à droite
 +~~~bash
 +#! /bin/bash
 +
 +set -e
 +set -o nounset
 +
 +dir="$1"
 +
 +decoupe_col()
 +{
 +    local line="$*"
 +    IFS='_' read a b c <<< "${line/.tif/}"
 +    echo "${c}_${b}_${a}"
 +}
 +
 +decoupe_line()
 +{
 +    while read line
 +    do
 +        decoupe_col "$line"
 +    done < <(find "$dir" -maxdepth 1 -type f -name "*.tif")
 +}
 +
 +trie()
 +{
 +    decoupe_line | sort
 +}
 +
 +trie | awk -F'_' '{print $3"_"$2"_"$1".tif"}'
 +~~~
 +
 +### Mot de passe
 +
 +~~~bash
 +read -s PASSWORD
 +
 +echo $PASSWORD
 +~~~
 +
 +
 +### Read et find
 +
 +source : https://www.shellcheck.net/wiki/SC2044
 +~~~bash
 +while IFS= read -r -d ` file
 +do
 +  (( count++ ))
 +  echo "Playing file no. $count"
 +  play "$file"
 +done <   <(find mydir -mtime -7 -name '*.mp3' -print0)
 +echo "Played $count files"
 +~~~
 +
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki