Sysop.Fr
Cat├ęgories

apache

awk

bash

charmap

date

echo

encoding

find

grep

hexdump

irc

iso3166

ls

mysql

printf

python

read

sed

seq

smpp

sort

tar

ucp

Articles

Mémo de la commande read

La commande read permet de lire des données de l'entrée standard.

            !!! ATTENTION à la commande read lorsque qu'elle est utilisée avec un pipe | dans un script !!!
            echo -e $lines | while read line 
                ...
            done

            La boucle ci-dessus sera executée dans un subshell. Donc tous les changements éffectués sur des variables ne seront pas conservés lors de la sortie du subshell.
            Lire la page bash - boucles (while, for) pour lire la solution.
            

1. Options de la commande read

-n ncharsla commande read s'arrêtera après avoir lu nchars caractères plutôt que d'attendre la ligne complète de l'entrée standard
-p promptla commande read affichera l'invite en cas d'erreur standard, sans un saut de ligne, avant de tenter de lire n'importe quelle entrée
-r(raw) si vous appuyez sur quelque chose comme anti-slash, il n'enregistre pas jusqu'à ce que vous appuyez sur la touche suivante
-s(slient) la commande read n'affichera pas le contenu saisi

2. Utiliser 'appuyer sur une touche pour continuer' dans un script shell

root@ubuntu:~# read -n1 -r -p "Press any key to continue..." key
            

3. Script shell intéractif

root@ubuntu:~# read -r -p "Quel est votre nom ? " name
Quel est votre nom ? Alexandre
root@ubuntu:~# echo $name
Alexandre
            
while true; do
    read -r -p "Please confirm? [Y/n] " user_input
    case $user_input in
        [yY][eE][sS]|[yY]) echo "Yes"; break;;
        [nN][oO]|[nN]) echo "No"; exit 1;;
        *) echo "Invalid input..."; continue;;
    esac
done
echo "I'm here"
            

4. Exemple d'utilisation de résultat de commande

root@ubuntu:~# ls -d /home/* |while read dir; do echo "J'ai trouvé le répertoire ${dir}"; done
J'ai trouvé le répertoire /home/toto
J'ai trouvé le répertoire /home/titi
            

5. Exemple d'utilisation d'un fichier externe

#!/bin/bash

fileIN=warning_smscid_8217.txt
#Sun Sep 16 17:30:09 2018 : (26841) - Output File Name: /opt/appdata/warning/20180916173009-152396166500001-8217-25185-2-DB50-2289.err

fileOUT=result.csv
rm -f ${fileOUT}

echo "date,seqno,orderid,smscid,customerid,status" |tee -a ${fileOUT}
while read -r line
do
    #echo "${line}"
    mydate=`echo ${line} |cut -d' ' -f1,2,3,4,5`
    myseqno=`echo ${line} |cut -d'-' -f3`
    myorderid="${myseqno:0:10}"
    mysmscid=`echo ${line} |cut -d'-' -f4`
    mycustid=`echo ${line} |cut -d'-' -f5`
    mystatus=`echo ${line} |cut -d'-' -f7`
    #mystatus=`echo ${line} |cut -d' ' -f12`
    #myseqnum=`echo ${line} |cut -d' ' -f13 |sed -e 's/)//g'`
    echo "${mydate},${myseqno},${myorderid},${mysmscid},${mycustid},${mystatus}" |tee -a ${fileOUT}
done < ${fileIN}