Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/06/2010, à 21:43

Gotita

Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

Bonjour,

voilà j'aimerais faire un script qui me permet de réaliser le chose suivante:

Je demande une entrée par exemple j'écris le mot "linux" et le script prend chaque lettre et l'incrémente, me donne le résultat et ainsi de suite.

Un exemple sera plus simple:

Donc je rentre "linux" et la console me donnera :

- mjovy
- nkpwz
-....

j'aimerai avoir les 25 combinaisons possibles.

Merci de votre aide

Dernière modification par Gotita (Le 23/06/2010, à 14:25)


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#2 Le 20/06/2010, à 21:57

Marmounette

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

# /bin/bash
echo -e "un mot ?"
read mot
(te permettra de lire le mot)

ensuite tu peux essayer des sed pour récupérer chaque lettre et la modifier http://www.commentcamarche.net/faq/9558-sed-introduction-a-sed-part-iii

et ca pour les 25 changement d'alphabet, tu les stock ensuite dans une variable et avec echo -e tu peux les afficher


Il reste un gnocchi devant mes yeux... Ah non il vient de disparaître ! :D

Hors ligne

#3 Le 20/06/2010, à 21:59

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

oui mais pour les incrémenter il faut les convertir en décimal non?


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#4 Le 20/06/2010, à 22:07

Marmounette

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

euh si j'ai bien compris ton manège pour la premiere tu decales les lettres de 1 lettre dans l'alphabet puis de 2 puis de 3 ect jusqu'a retomber sur "linux", non ?

Eh bien soit tu peux t'amuser a leur trouver le chiffe attribuer, leur ajouter n et puis les retraduire en lettre, soit tu utilises simplement sed en pipe pour chager a en b, b en c, c en d ect...
genre : sed "linux" /s/a/b/g/ | sed /s/b/c/g/ | sed /s/c/d/g/ ... et ainsi de suite.

Dernière modification par Marmounette (Le 20/06/2010, à 22:07)


Il reste un gnocchi devant mes yeux... Ah non il vient de disparaître ! :D

Hors ligne

#5 Le 20/06/2010, à 22:09

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

ok merci et avec la première solution, comment on convertit les caractères en decimal avec le code ASCII? j'ai cherché mais je ne trouve pas sad


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#6 Le 20/06/2010, à 22:15

gilbert

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

devoir à rendre pour quand ?? lol

pour récupérer le (n+1)è caractère de la variable $VAR : echo ${VAR:n:1} si je mets 3 à la place de n ça me retournera le 4è caractère, le 1er étant à 0.

pour incrémenter le caractère tu peux utiliser tr(1)

exemple pour linux :

$read -p "Entrez votre mot : " MOT
Entrez votre mot : linux
$ echo $MOT | tr "[\040-\376]" "[\041-\377]"
mjovy
$

EDIT : dans tr j'ai commencé à partir de 40 pour ne pas convertir les caractères spéciaux... mais tu peux commencer à partir de 0..

Dernière modification par gilbert (Le 20/06/2010, à 22:17)


Simplement moi-même..

Hors ligne

#7 Le 20/06/2010, à 22:19

Marmounette

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

Solution plus court que sed, c'est vrai que je n'utilise pas ce genre de choses moi au taff... Ca ressemble à un devoir en effet XD

On dirait les exos qu'on nous donnait : coder la résolution d'un sudoku avec les loi suivantes en fortran... mdr


Il reste un gnocchi devant mes yeux... Ah non il vient de disparaître ! :D

Hors ligne

#8 Le 20/06/2010, à 22:21

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

mdr merci les gars, même pas pour un devoir, pour la culture perso, en fait je cherche un nouveau pseudo basé sur mon prénom et je voulais savoir les combinaisons en pseudo cryptant mon prénom big_smile:D


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#9 Le 20/06/2010, à 23:47

nesthib

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

tu as caesar en ligne de commande qui fait ça très bien (dans les dépôts, paquet bsdgames) :

echo 'linux' | caesar [nombre]

ou en interactif :

caesar [nombre]

ps. on dit chiffrer en français pas crypter (un peu de culture sur le chiffre de césar)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#10 Le 21/06/2010, à 10:18

Totor

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

Bonjour,

Uniquement à titre informatif :

pseudo="PSEUDO"
suivant=""
for((i=0;i<${#pseudo};i++))
do
  ascii=$(printf "%d" \'${pseudo:${i}:1}) # code ascii de la ième lettre
  ((ascii++)) # code ascii suivant --> il faudrait vérifier de ne pas dépasser 255
  octal=$(printf "%03o" ${ascii}) # on converti en octal
  suivant="${suivant}$(printf "\\${octal}")" # on transforme en char la valeur octal que l'on concatène au mot suivant
done
echo "${suivant}"

-- Lucid Lynx --

Hors ligne

#11 Le 21/06/2010, à 10:53

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

Merci tous le monde!!!:)


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#12 Le 23/06/2010, à 12:35

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

Re bonjour,

j'ai un petit soucis de syntaxe, je suis partis du code de Totor et j' ai voulu mettre un test pour quand on arrive a "z" on passe a "a" mais la console me donne des erreurs:

#!/bin/bash


echo Nom?
read pseudo


for((j=1;j<26;j++)) # on parcourt toutes les combinaisons
do
	suivant=""
		for((i=0;i<${#pseudo};i++))
		do
 		 ascii=$(printf "%d" \'${pseudo:${i}:1}) # code ascii de la ième lettre
  		((ascii++)) # code ascii suivant --> il faudrait vérifier de ne pas dépasser 255
		
		# si la lettre était un "z" on le passe en a
		if [ $ascii=123 ]
		then
			ascii = "97"
		fi

  		octal=$(printf "%03o" ${ascii}) # on converti en octal
  		suivant="${suivant}$(printf "\\${octal}")" # on transforme en char la valeur octal que l'on concatène au mot suivant
		done

		echo $suivant
		pseudo=$suivant
done

La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#13 Le 23/06/2010, à 13:39

gilbert

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

salut,

voici tes erreurs :

if [ $ascii=123 ]
then
            ascii = "97"
fi

à remplacer par :

if [ $ascii == "123" ]
then
            ascii="97"
fi

Ta 1ère erreur :
dans la condition, si tu compares l'égalité de deux chaînes de caractères il faut utiliser l'oprateur == (qui est plus un argument ici), si tu veux comparer deux nombres il faut utiliser l'opérateur -eq. Ici, dans ton cas, que tu utilises == ou -eq ça fonctionnera pareillement. mais le = simple est un opérateur d'affectation.

Ta 2è erreur :
Quand on affecte une valeur à une variable, on ne met pas d'espace entre avanet et après le = en bash : variable=valeur.

A+

Dernière modification par gilbert (Le 23/06/2010, à 13:40)


Simplement moi-même..

Hors ligne

#14 Le 23/06/2010, à 14:24

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

big_smile merci le script fonctionne


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#15 Le 23/06/2010, à 14:41

lovasoa

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

@gilbert: il me semble que test (les crochets après le if sont automatiquement remplacés par la commande test) accepte = comme opérateur de comparaison. En effet, test ne permet pas de définir une variable, il n'y a donc pas la même ambiguité que dans la plupart des langages de programmation.
http://www.laboiteaprog.com/article-79- … conditions

Dernière modification par lovasoa (Le 23/06/2010, à 14:44)


Pour les pauvres idiots, il y a Windows. Pour les riches Idiots, il y a mac os. Pour moi, il y a Ubuntu.

Hors ligne

#16 Le 23/06/2010, à 21:38

gilbert

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

lovasoa a écrit :

@gilbert: il me semble que test (les crochets après le if sont automatiquement remplacés par la commande test) accepte = comme opérateur de comparaison. En effet, test ne permet pas de définir une variable, il n'y a donc pas la même ambiguité que dans la plupart des langages de programmation.
http://www.laboiteaprog.com/article-79- … conditions

il fait même plus que te sembler car c'est totalement vrai ce que tu dis.

Mais ouais, ok ma réponse est un peu malhabile. Disons que si l'on s'habitue à utiliser le simple = on peut prendre de mauvaises habitudes et les traîner ailleurs. Pour des raisons de concordance mentale, je pense, mais ce n'est qu'un avis personnel, qu'il est préférable de rester cohérent avec les autres langages et de préférer le == au simple =.

mais si on arrive à jongler facilement alors oui, pas de soucis à utiliser le simple =.


Simplement moi-même..

Hors ligne

#17 Le 25/06/2010, à 23:30

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

Bonjour, c'est toujours moi.

j'aimerai rajouter une condition au code mais je suis bloqué

avant le

echo $suivant

je veux verifier que la variable contienne au moins une voyelle.

donc c'est avec un if mais avec je sais pas trop comment faire


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#18 Le 25/06/2010, à 23:47

Postmortem

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

$ suivant=ottrfcv
$ [[ "$suivant" == *[aeiouAEIOU]* ]] && echo "Au moins une voyelle" || echo "Pas de voyelle"
Au moins une voyelle
$ suivant=ttrfcv
$ [[ "$suivant" == *[aeiouAEIOU]* ]] && echo "Au moins une voyelle" || echo "Pas de voyelle"
Pas de voyelle

Edit : j'ai modifié pour ne pas utiliser les expressions régulières

Dernière modification par Postmortem (Le 26/06/2010, à 00:18)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#19 Le 26/06/2010, à 11:03

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

Merci cela fonctionne, mais je pourrais avoir quelques explications notamment le *[aeuioy]* et je pourrai avoir un exemple avec les expressions régulières histoire d'apprendre. Merci


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne

#20 Le 26/06/2010, à 11:35

Postmortem

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

[[ chaine1 == motif ]] : On compare chaine1 au motif. Dans notre cas :
[[ "$suivant" == *[aeiouAEIOU]* ]] :
C'est un test où on compare la valeur de $suivant avec *[aeiouAEIOU]*
Dans *[aeiouAEIOU]* :
* : n'importe quelle chaîne de caractères (y compris la chaîne nulle)
[aeiouAEIOU] : une des lettres comprises entre les crochets

En expressions régulières :
On remplace == par =~
[[ "$suivant" =~ .*[aeiouAEIOU].* ]] :
On compare la valeur de $suivant avec l'expression régulière .*[aeiouAEIOU].*
Dans les expressions régulières :
. : n'importe quel caractère
* : répétition de 0 ou n fois le caractère précédent
Donc .* veut dire n'importe quelle chaîne de caractère, y compris la chaîne vide
[aeiouAEIOU] : une des lettres présentes entre crochets


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#21 Le 26/06/2010, à 11:54

Postmortem

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

En fait, avec les expressions régulières, la syntaxe suivante suffit :
[[ $suivant =~ [aeiouAEIOU] ]] && echo "Au moins une voyelle" || echo "Pas de voyelle"


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#22 Le 26/06/2010, à 12:44

Gotita

Re : Besoin d'aide pour un script (petit nouveau linuxien) [résolu]

merci pour ces précieuses informations


La vie d'un geek ne tient souvent qu'à un fil : un câble ethernet.

Hors ligne