Le blog de Fatiha

Une geek de plus !

Créer un menu basique avec la commande select en ksh

 

En ksh, vous pouvez afficher un menu et ainsi proposer à un utilisateur de faire un choix. Rien ne vaut un exemple :

PS3= »Choisissez un film : « 
select REPLY in scream awake
do
       case $REPLY in
       scream)  echo « Type : film comique » ; break ;;
       awake)  echo « Type : thriller » ; break ;;
      *) echo « Erreur » ; exit 1;;
       esac
done

# ajout d’un traitement suivant le choix de l’utilisateur

Le résultat est le suivant :

[fatiha@monServeur]  ./selectEnKsh.ksh
1) scream
2) awake
Choisissez un film : 2
Type : thriller
[fatiha@monServeur]   ./selectEnKsh.ksh
1) scream
2) awake
Choisissez un film : 3
Erreur
[fatiha@monServeur] ./selectEnKsh.ksh
1) scream
2) awake
Choisissez un film : 2
Type : thriller

Pour plus d’infos => Google :)

Mise à jour :

On verra dans un prochain article une commande bien plus intéressante : dialog.

Linux : Extraction de colonnes avec la commande cut

 

Vous avez un fichier de logs à analyser et avez besoin d’extraire des colonnes bien précises. Tout ceci bien sûr en une ligne de commande sous Linux. Ceci est possible avec la commande cut.

Prenons tout de suite l’exemple d’un fichier de logs avec des colonnes séparées par des tirets. Le tiret est donc notre délimiteur. Nous souhaitons extraire les colonnes 2 et 4.

Aperçu du fichier à analyser :

champ1 – champ2 – champ3 – champ4 – champ5 – champ6

La ligne de commande sera :

cut -d’-’ -s -f2,4 monFichier.log > fichierResultat

Analyse de la ligne de commande :

  • option -d pour indiquer quel est le délimiteur
  • option -s pour supprimer les lignes ne contenant pas le délimiteur
  • option -f pour spécifier les champs à extraire
  • monFichier.log : le fichier à analyser
  • fichierResultat : fichier qui va contenir les champs extraits

Pour en savoir plus :

man cut

Séquence howto du jour : Fonctions en ksh

 

Comment coder une fonction en ksh sous Linux ? Quelle est la syntaxe à utiliser ?

Pour définir une fonction en ksh on utilise les mots-clés suivants :

function myFunction

{

#code of my function

}

L’appel se fait de plusieurs manières, j’ai choisi celle-ci :

`myFunction`

Assez discuté, passons à un cas pratique. J’ai un fichier de logs à analyser. Je veux récupérer le nombre de fois que les expressions ERROR, WARNING et INFO apparaissent.

#!/bin/ksh

# prend en paramètre une chaîne de caractères
# ici c'est une expression qui doit être recherchée dans un fichier de logs
function returnNumber
{
 # $1 est le paramètre passé à la fonction
 pattern=$1
 number=`grep -c "${pattern}" test.log`
 echo ${number}
}

# on appelle la fonction avec des anti-quotes
# et en paramètre le pattern à rechercher dans le fichier de logs
echo "`returnNumber ERROR` fois ERROR"
echo "`returnNumber WARNING` fois WARNING"
echo "`returnNumber INFO` fois INFO"

J’exécute le script :

Pour en savoir plus sur les fonctions en ksh :

Commande nohup sous Linux

 

Qu’est-ce que la commande nohup sous Linux ? Dans quels cas est-elle utilisée ?

J’ai entendu parler de la commande nohup dans le domaine professionnel. Cette commande est utilisée souvent sous Linux lors de lancement de scripts.

nohup – Exécuter un programme en le rendant insensible aux déconnexions

La syntaxe est la suivante :

nohup COMMAND [ARG]…
nohup OPTION

Rien ne vaut une exemple avec le lancement d’un script shell /tmp/testShell.ksh :

#!/bin/ksh

echo "test 1" >> /tmp/testShell.log
sleep 10
echo "test 2" >> /tmp/testShell.log
sleep 20
echo "test 3" >> /tmp/testShell.log
sleep 30
echo "test 4" >> /tmp/testShell.log
sleep 40
echo "fin" >> /tmp/testShell.log

Après quelques secondes je ferme mon terminal. J’ouvre un nouveau terminal et je vérifie si le script a continué de tourner :
Nous remarquons que dès que j’ai fermé mon terminal, quand je me suis déconnectée, le script s’est arrêté avant la fin. Ce qui est très problématique.

C’est là que la commande nohup entre en jeu ! Je lance exactement le même script avec nohup, puis je me déconnecte.

Je me reconnecte pour vérifier que le script a continué à tourner :

Je vais vérifier que le fichier de log généré par le script est correct :