PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.unix > manipuler des chaines de caracteres
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.unix Système UNIX.

manipuler des chaines de caracteres

Réponse
 
LinkBack Outils de la discussion
Vieux 02/05/2006, 14h37   #1
octane@alinto.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut manipuler des chaines de caracteres

Bonjour,

je cherche a ecrire des caracteres depuis leur equivalent hexadecimal
en shell.

par exemple partir de 5A qui represente Z en ASCII

comment faire?

Ensuite est il possible pour un script shell de generer 8 caracteres
compris dans la tranche ASCII 0x20 .. 0x126 ?

(l'idee est d'en faire un generateur de mot de passe aleatoire)

Merci

  Réponse avec citation
Vieux 02/05/2006, 14h50   #2
Luc Habert
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: manipuler des chaines de caracteres

octane@alinto.com :

> Ensuite est il possible pour un script shell de generer 8 caracteres
> compris dans la tranche ASCII 0x20 .. 0x126 ?

^^^^^
Tu veux dire «0x7E», j'imagine?

> (l'idee est d'en faire un generateur de mot de passe aleatoire)


A=`dd bs=N count=1 </dev/urandom | mimencode`
echo "${A%%=*}"

pour un certain N. Bon d'accord, les caractères ne sont choisis que parmi 64
caractères sur 95.
  Réponse avec citation
Vieux 02/05/2006, 15h10   #3
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: manipuler des chaines de caracteres

On 2 May 2006 06:37:41 -0700, octane@alinto.com wrote:
> Bonjour,
>
> je cherche a ecrire des caracteres depuis leur equivalent hexadecimal
> en shell.
>
> par exemple partir de 5A qui represente Z en ASCII


perl -e 'printf "%c\n", 0x5A'

Avec certains dc:

echo 16i 5A ap | dc

POSIXement:

oct=$(echo 'ibase=16; obase=8; 5A' | bc)
printf '%b\n' "\0$oct"

> Ensuite est il possible pour un script shell de generer 8 caracteres
> compris dans la tranche ASCII 0x20 .. 0x126 ?

[...]

perl -le 'srand(); print pack "C*", map {rand(95)+32} 1..8'

POSIXement:

awk '
BEGIN {
srand()
for (i = 0; i < 8; i++)
printf "%c", rand() * 95 + 32
print ""
}'

--
Stephane
  Réponse avec citation
Vieux 02/05/2006, 15h40   #4
Pascal Bourguignon
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: manipuler des chaines de caracteres

lhabert@clipper.ens.fr (Luc Habert) writes:

> octane@alinto.com :
>
>> Ensuite est il possible pour un script shell de generer 8 caracteres
>> compris dans la tranche ASCII 0x20 .. 0x126 ?

> ^^^^^
> Tu veux dire «0x7E», j'imagine?
>
>> (l'idee est d'en faire un generateur de mot de passe aleatoire)

>
> A=`dd bs=N count=1 </dev/urandom | mimencode`
> echo "${A%%=*}"
>
> pour un certain N. Bon d'accord, les caractères ne sont choisis que parmi 64
> caractères sur 95.


Oui, mais là, tu utilises dd. C'est de la triche, on demandait un
script shell, pas un dd...

#!/bin/bash
chars=' !\"#$%&'\''()*+,-./0123456789:;<=>?'
chars="$chars"'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'
chars="$chars"'\`abcdefghijklmnopqrstuvwxyz\{\|\}\ ~'
echo -n 'Generated: '
i=0 ; while [ $i -lt 8 ] ; do
echo -n "${chars:$(( $RANDOM % ( 1 + ${#chars} ) )):1}"
# I know about print, but it's an external program.
i=$(( $i + 1 ))
done
echo ''






--
__Pascal Bourguignon__ http://www.informatimago.com/

PLEASE NOTE: Some quantum physics theories suggest that when the
consumer is not directly observing this product, it may cease to
exist or will exist only in a vague and undetermined state.
  Réponse avec citation
Vieux 04/05/2006, 09h57   #5
octane@alinto.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: manipuler des chaines de caracteres

Pascal Bourguignon a écrit :
> Oui, mais là, tu utilises dd. C'est de la triche, on demandait un
> script shell, pas un dd...
>
> #!/bin/bash
> chars=' !\"#$%&'\''()*+,-./0123456789:;<=>?'
> chars="$chars"'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'
> chars="$chars"'\`abcdefghijklmnopqrstuvwxyz\{\|\}\ ~'
> echo -n 'Generated: '
> i=0 ; while [ $i -lt 8 ] ; do
> echo -n "${chars:$(( $RANDOM % ( 1 + ${#chars} ) )):1}"
> # I know about print, but it's an external program.
> i=$(( $i + 1 ))
> done
> echo ''
>

Parfait. Merci

  Réponse avec citation
Vieux 04/05/2006, 10h17   #6
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: manipuler des chaines de caracteres

On 4 May 2006 01:57:21 -0700, octane@alinto.com wrote:
> Pascal Bourguignon a écrit :
>> Oui, mais là, tu utilises dd. C'est de la triche, on demandait un
>> script shell, pas un dd...
>>
>> #!/bin/bash
>> chars=' !\"#$%&'\''()*+,-./0123456789:;<=>?'
>> chars="$chars"'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'
>> chars="$chars"'\`abcdefghijklmnopqrstuvwxyz\{\|\}\ ~'
>> echo -n 'Generated: '
>> i=0 ; while [ $i -lt 8 ] ; do
>> echo -n "${chars:$(( $RANDOM % ( 1 + ${#chars} ) )):1}"
>> # I know about print, but it's an external program.


La commande "print" quand elle est externe est plus generalement
une commande pour imprimer. Sinon, c'est un builtin de ksh ou
zsh. C'est printf qu'il faut utiliser, qui est standard et
portable et interne a bash et a la plupart des sh POSIX/Unix.

>> i=$(( $i + 1 ))
>> done
>> echo ''
>>

> Parfait. Merci


A noter que la solution ci-dessus n'est ni standard, ni portable
(ya des bashs qui ne reconnaissent pas -n, ni tres lisible, ni correcte (le
backslash se retrouve une dixaine de fois, le calcul avec
$RANDOM n'est pas correct. Et la distribution de $((RANDOM %
<tout-nombre-qui-n'est-pas-une-puissance-de-deux)) n'est pas
uniforme.

A comparer avec:

awk '
BEGIN {
srand()
for (i = 0; i < 8; i++)
printf "%c", rand() * 95 + 32
print ""
}'

Qui est non seulement correct mais portable, non seulement sur
les systemes conformes a la norme Unix, mais aussi a la norme POSIX
(portable OS interface).

--
Stephane
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 19h34.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,12622 seconds with 14 queries