$> ls -l
-rwrw-rw- 1 db0   db0 62.1 Ko 2015-03-30 19:37 Impatient C
-rwrw-rw- 1 db0   db0  3.5 Ko 2015-03-30 19:37 Impatient SCM
-rwrw-rw- 1 db0   db0  3.0 Ko 2015-03-30 19:37 Impatient Emacs
-rwrw-rw- 1 db0   db0  2.4 Ko 2015-03-30 19:37 Impatient Man Pages
-rwrw-rw- 1 db0   db0 10.5 Ko 2015-03-30 19:37 Impatient Perl
-rwrw-rw- 1 db0   db0 17.3 Ko 2015-03-30 19:37 Impatient Python
-rwrw-rw- 1 db0   db0 13.6 Ko 2015-03-30 19:37 Impatient Shell Debutant
-rwrw-rw- 1 db0   db0 16.4 Ko 2015-03-30 19:37 Impatient Shell Script
-rwrw-rw- 1 db0   db0  3.4 Ko 2015-03-30 19:37 Impatient Shell
-rwrw-rw- 1 db0   db0  1.8 Ko 2015-03-30 19:37 Impatient Vim


Impatient Shell Script

Sommaire

  1. Fichier et execution
  2. Syntaxe
  3. Conditions et equivalences en C
  4. Tests sur des fichiers
  5. Commandes shell particulierement pratiques pour des shells scripts
  6. Autres commandes shell
  7. Exemples
  8. Exercices
  9. Corrections

Fichier et execution

UP

Syntaxe

UP

Conditions et equivalences en C

Francais C Shell Script
expression1 et expression2 vraies ((expression1) && (expression2)) [ expression1 -a expression2 ]
expression1 ou expression2 vraies ((expression1) || (expression2)) [ expression1 -o expression2 ]
Longueur de la chaine de caracteres differente de zero (strlen(string) != 0) [ -n string ]
Longueur de la chaine de caracteres egale a zero (strlen(string) == 0) [ -z string ]
Chaine de caractere 1 egale a chaine de caractere 2 (strcmp(string1, string2) == 0) [ string1 = string2 ]
Chaine de caractere 1 differente de chaine de caractere 2 (strcmp(string1, string2) != 0) [ string1 != string2 ]
integer a egal integer b (a == b) [ a -eq b ]
integer a superieur ou egal integer b (a >= b) [ a -ge b ]
integer a superieur integer b (a > b) [ a -gt b ]
integer a inferieur ou egal integer b (a <= b) [ a -le b ]
integer a inferieur integer b (a < b) [ a -lt b ]
integer a different integer b (a != b) [ a -ne b ]
UP

Tests sur des fichiers

Francais Shell Script
Le fichiers existe [ -e file ]
Le fichiers n'existe pas [ ! -e file ]
Le fichiers existe et on peut lire [ -r file ]
Le fichiers existe et on peut ecrire [ -w file ]
Le fichiers existe et est executable [ -x file ]
Le fichiers existe et c'est un dossier [ -d file ]

---> Lire le man test pour plus de tests sur les fichiers.

UP

Commandes shell particulierement pratiques pour des shells scripts

Autres commandes shell

Voir article Impatient shell.

UP

Exemples

Exemple simple de traitement des arguments :

  #!/bin/sh
  # Made by		db0
  # Contact		db0company[at]gmail[dot]com
  # Website		http://db0.fr/

  if [ $# -eq 2 ]
  then
    echo "J'ai deux arguments : " $1 "et" $2
  elif [ $# -eq 1 ]
  then
    echo "J'ai un argument : " $1
  else
    echo "donne moi un argument !"
  fi
Exemple de petit programme simple a comprendre qui propose 3 options dont une avec un petit jeu pour deviner un nombre et les deux autres pour faire des mini-fiches utilisateurs :

#!/bin/bash
# Made by             db0
# Contact             db0company[at]gmail[dot]com
# Website             http://db0.fr/

# Fonctions

devine_nombre()
{
    rand_number=$[ $RANDOM % 20]
    search_number=0
    echo "Cherche le nombre compris entre 1 et 20"
    while [ $search_number -ne $rand_number ]
    do
        echo -n "Choisis un nombre : "
        read search_number
	tmp_nombre=$search_number
	tmp_nombre=$[search_number+0]
	if [ $search_number = $tmp_nombre ];
	then
            if [ $search_number -ne $rand_number ]
            then
		echo -n "Essaye encore "
		if [ $search_number -gt $rand_number ]
		then
		    echo "avec un nombre plus petit."
		else
		    echo "avec un nombre plus grand."
		fi
            elif [ $search_number -eq $rand_number ]
	    then
		echo "Bravo ! Le nombre etait bien $rand_number"
            fi
	else
	    echo "Tu m'as pas donne de chiffre, vilain"
	    search_number=0
	fi

    done
    echo "Merci pour ce petit jeu."
}

fiche_user()
{
    fiche_user="fiche_user_$1.txt"
  # mettre le nom dans la fiche
    echo "Nom : $1" > $fiche_user
  # mettre le shell par defaut dans la fiche
    result_grep=`grep $1 /etc/passwd`
    if [ -z $result_grep ]
    then
        echo "L'utilisateur $1 n'existe pas"
        rm -f $fiche_user
        exit 1
    fi
    result_cut=`echo $result_grep | cut -d':' -f7`
    if  [ -n $result_cut ]
    then
        echo "Shell par defaut :" $result_cut >> $fiche_user
    fi
  # affichage de la fiche
    echo "Fiche terminee :"
    cat $fiche_user
}

# Recuperer le nom d'utilisateur dans la ligne de commande
if [ $# -eq 1 ]
then
    echo "Bonjour $1"
else
    echo "Attention tu as oublie de me dire ton nom comme argument."
    exit 1
fi

# Demander l'option
echo "Option 1 : Jeu, Devine le nombre"
echo "Option 2 : Creer une fiche sur $1"
echo "Option 3 : Creer une fiche sur $USER"

echo -n "Quelle option tu choisis ? "
read option

case $option in
    1)
	devine_nombre
	;;
    2)
	fiche_user $1
	;;
    3)
	fiche_user $USER
	;;
    *)
	echo "l'option n'existe pas"
	exit 1
	;;
esac
                  .
   .. ............;;.
    ..::::::::::::;;;;.      [  Download  ]
  . . ::::::::::::;;:'
                  :'
UP

Exercices

Corrections
total 20
-rwxr-xr-x 1 dbzero users  267 Aug  6 11:54 print_pid_args.sh*
-rwxr-xr-x 1 dbzero users  201 Aug  6 12:36 chrono.sh*
-rw-r--r-- 1 dbzero users  128 Aug  6 12:33 ascii_art_file
-rwxr-xr-x 1 dbzero users 2253 Aug  6 13:00 mon_premier_script_shell_modif1.sh*
-rwxr-xr-x 1 dbzero users 2521 Aug  6 12:52 mon_premier_script_shell_modif2.sh*
UP

Commentaires | Ajouter un commentaire