Juin 152011
 

Testé sur HP-UX

veuillez vérifier le chemin de /bin/printf et /bin/echo

détection de la taille de l’écran.
affichage sans débordement à moins que l’un des choix soit lui même plus grand que le taille de cet écran.

cette fonction prend en argument un liste de valeur et retourne cette liste comme un menu.
ce menu sera adapté à la taille de votre terminal.

si la taille ne peut pas être détectée, l’affichage sera un choix par ligne.
Continue reading »

Juin 142011
 

Pour réduire une ligne de texte à un nombre de caractères max, voici la fonction qu’il vous faut:

function reduct_txt($txt,$nbchar="75") {
   $newtxt = html_entity_decode($txt);
   if(strlen($newtxt) > $nbchar) {
      $newtxt = substr($newtxt, 0, ($nbchar - 2)) . "...";
   }
   return $newtxt;
}

vous n’avez plus qu’à appeler cette fonction ainsi:
Continue reading »

Juin 142011
 

voici en zsh, comment inverser un texte:

$ var="abc"
$ print -a ${(j::)${(Oas::)var}}
cba

j’ai cherché l’équivalent en bash, je n’ai pas trouvé.
par contre, je suis tombé la dessus en relisant la man page:

${parameter:offset}
${parameter:offset:length}
   Substring  Expansion.   Expands  to  up  to  length  characters of parameter starting at the character specified by offset.

voici ce que ça donne:

$ var=abc
$ for ((i=$((${#var}-1));i>=0;i--))do printf "${var:$i:1}";done    
cba
$ var='une chaine a retourner!'
$ for ((i=$((${#var}-1));i>=0;i--))do printf "${var:$i:1}";done
!renruoter a eniahc enu
Juin 142011
 

j’ai eu envie de centrer un texte hier sur mon terminal, afin de rendre plus lisible la sortie d’un script, voici comment j’ai fait, ça peut servir:

Download : txtcenter.sh#!/bin/bash

# message a afficher
MSG= »${*} »

# on verifie etre sur un terminal
tty >/dev/null
[ « $? » != « 0 » ] && echo « ${MSG} » && return 0

COLS= »$(tput cols) »
[ « $? » != « 0 » -o -n « $(echo ${COLS} |sed ‘s/[0-9]//g’) » ] && echo « ${MSG} » && return 0

# on entoure le message d’espaces
BORDER= »  »

# on peut centrer le texte maintenant
echo « ${MSG} » |awk \
-v COLS= »${COLS} » \
-v BORDER= »${BORDER} » \
‘{
MSG_LENGTH = length($0) ;
COLS = (COLS – MSG_LENGTH);
BORDER_LENGTH = length(BORDER) ;
for ( i = 1 ; i <= COLS ; i = (i + BORDER_LENGTH) ) { i = (i + BORDER_LENGTH) ; BORDER_MSG = BORDER_MSG BORDER; } printf ("%s%s%s\n",BORDER_MSG, $0, BORDER_MSG) ; }' [/bash]