gestion du clavier et calculer

read: assigner à une variable ce que le user a saisi au clavier

#!/bin/bash

echo -n "Saisir du texte > "
read text
echo "Tu as écrit: $text"

Ligne 3 on affiche un prompt > car echo -n garde sur la meme ligne. L'argument de read est text (attend saisie suivie de ENTER) mais sans arg il prend alors la var d'environnement REPLY.

Options de read les plus utiles sont -t et -s   -s n'affiche pas ce qu'on saisit (cas pw) et "-t nb seconde" définit un timeout au read.
Ex de -t:

#!/bin/bash

echo -n "Allez, vite... tappe un truc au clavier ! > "
if read -t 3 response; then
    echo "Bravo tu l'as fait à temps ) "
else
    echo "T'es vraiment trooop lent !"
fi

 

Calculer

les doubles ((  ))

echo $((2+2))
echo $(( 2 + 2 )) est absolument identique (peu importe les espaces)

autre ex

#!/bin/bash

first_num=0
second_num=0

echo -n "Enter the first number --> "
read first_num
echo -n "Enter the second number -> "
read second_num

echo "first number + second number = $((first_num + second_num))"
echo "first number - second number = $((first_num - second_num))"
echo "first number * second number = $((first_num * second_num))"
echo "first number / second number = $((first_num / second_num))"
echo "first number % second number = $((first_num % second_num))"
echo "first number raised to the"
echo "power of the second number   = $((first_num ** second_num))"

notes

 

"first_num + second_num"
dans une expr arithmétique le $ n'est pas obligatoire

 

/ diviser des nb entiers est invalide...  et donne une erreur

 

 % est le modulo ou le reste

est très utile s'il retourne 0 car signifie alors que nb1 est un multiple de nb2... voir par ex le script suivant

 

"est un multiple de" ou de l'utilisation du modulo %

#!/bin/bash

number=0

echo -n "Enter a number > "
read number

echo "Number is $number"
if [ $((number % 2)) -eq 0 ]; then
    echo "Number is even"
else
    echo "Number is odd"
fi

 

formater un "nb de secondes" en heure et minutes

#!/bin/bash

seconds=0

echo -n "Entrer un nombre (de secondes) > "
read seconds

hours=$((seconds / 3600))
seconds=$((seconds % 3600))
minutes=$((seconds / 60))
seconds=$((seconds % 60))

echo "Ca fait $hours hour(s) $minutes minute(s) $seconds second(s)"

 

 

Source complète en anglais à http://linuxcommand.org/lc3_wss0100.php