#1 Le 09/01/2017, à 15:45
- elladan35
[Résolu]Bash générer variables en découpant une chaine de caractère
Bonjour !
En bash, j'essaye d'automatiser l'intégration d'une clé publique SSH sur mes équipements réseaux.
Ainsi, j'ai commencé par récupérer le nombre de caractères composant la clé SSH (qui est, ici, de 752) avec les commandes suivantes :
catidrsapub=`cat id_rsa.pub`
lengthrsapub=$(echo -e $catidrsapub | wc -c)
echo "$lengthrsapub"
Maintenant que j'ai le nombre de caractères, je commence une division arrondie à l'entier supérieur. En effet, le problème d'un équipement Cisco, est qu'il n'est pas possible d'écrire dans la CLI plus de 254 caractères à la fois ! Il faut donc décomposer les 752 caractères en plusieurs blocs pour tout rentrer après.
Ainsi, j'ai décidé que mes blocs feront au maximum 250 caractères chacun. Les commandes ci-dessous me permettent de connaître le nombre de blocs qu'il me faudra pour poursuivre :
lengthrsapub=$((($lengthrsapub/250)+($lengthrsapub%250>0)))
echo "$lengthrsapub"
Ainsi, 752 / 250 arrondi à l'entier supérieur me donne 4, soit 4 blocs pour tout rentrer.
Mais maintenant, j'ai un problème !
En effet, je ne vois pas trop comment je peux faire pour faire le découpage !
Il faudrait que mon script, en voyant qu'il faut 4 blocs pour tout rentrer, définisse 4 variables. la première variable récupère les 250 premiers caractères, la seconde les 250 suivantes et ainsi de suite jusqu'à ce qu'on ait créé 4 variables. (avec au final, la 4eme variable n'ayant que 2 caractères).
Je m'en remets donc à vous en ésperant avoir une réponse à ma problématique !
Dernière modification par elladan35 (Le 11/01/2017, à 11:12)
Hors ligne
#2 Le 09/01/2017, à 16:20
- Arbiel
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
Bonjour
Peut-être une variable de type tableau, et un découpage avec dd ?
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#3 Le 09/01/2017, à 17:02
- pingouinux
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
Bonjour,
v1=$(dd if=id_rsa.pub bs=250 count=1 skip=0)
v2=$(dd if=id_rsa.pub bs=250 count=1 skip=1)
v3=$(dd if=id_rsa.pub bs=250 count=1 skip=2)
v4=$(dd if=id_rsa.pub bs=250 count=1 skip=3)
Mais pourquoi ne pas prendre des blocs de 251 pour en avoir un de moins ?
Hors ligne
#4 Le 09/01/2017, à 17:18
- MrRaph_
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
Mais pourquoi ne pas prendre des blocs de 251 pour en avoir un de moins ?
Je crois que la contrainte des 250 est fixée par le matériel Cisco ! ;-)
Heureux possesseur de deux Ubuntu 15.04 (serveur).
Je blog mes aventures techniques sur ce système et d'autres sur mon blog
https://techan.fr/
Hors ligne
#5 Le 09/01/2017, à 17:24
- pingouinux
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
Je crois que la contrainte des 250 est fixée par le matériel Cisco ! ;-)
En effet, le problème d'un équipement Cisco, est qu'il n'est pas possible d'écrire dans la CLI plus de 254 caractères à la fois !
Il semble qu'on puisse s'en tirer avec 3 blocs.
Hors ligne
#6 Le 09/01/2017, à 21:34
- elladan35
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
Bonjour et merci de vos réponses !
Oui dans mon script j'ai voulu faire des blocs de 250 mais bien sûr il est possible de monter jusqu'à des blocs de 254 (ce qui serait plus logique ici sachant qu'on peut tout rentré à partir de blocs de 251).
Merci beaucoup pingouinux ! Je m'empresserais demain de tester cela et ainsi poursuivre mon script
Dés que j'aurais formé cela sous la forme d'une fonction je vous enverrais ma façon de faire si cela vous intéresse !
Encore merci !
Hors ligne
#7 Le 09/01/2017, à 22:13
- alex2423
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
Excellent pingouinux la commande dd, pour ma part, j'aurais utilisé la commande cut, mais je serais pris la tête.
Cependant après renseignement de la commande dd, il semblerait que le paramètre BST correspond à des octets et non pas des caractères.
https://fr.wikipedia.org/wiki/Dd_(Unix)
Hors ligne
#8 Le 10/01/2017, à 07:09
- pingouinux
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
il semblerait que le paramètre BST correspond à des octets et non pas des caractères
C'est le paramètre bs, mais tu as raison.
Hors ligne
#9 Le 10/01/2017, à 08:07
- Watael
Re : [Résolu]Bash générer variables en découpant une chaine de caractère
salut,
$ rsaString=$(tr -dc [[:alnum:]_] < /dev/urandom | head -c 752) # génére une chaîne aléatoire de 752 caractères.
$ for ((i=0;i<${#rsaString};i+=250)); do printf 'envoi vers CISCO :\n%s\n\n' ${rsaString:i:250}; done
envoi vers CISCO :
DyJhLjU0CFM2p07HbkFZyYnQNjqNgMCkj1[LFIEpq_iBb4oSiuRwT[V7kq6rOihtvLJS9eHxfEMigjLWjmw0GGZ]SfkT2X[pwa1TFSon6]V7H7FulICfu1I]J5RK6SvFrXKdmTxRJE7fENYVJstVCjfqadpNNhXjxmw58[uhV89afUQ5Xo1Sz[pbyE5hOTUVvh7j2DUSCZDwlevFqFULe[gWtzjkY8oM]ksEE0cCCes85AyNZUQuqzdJCR
envoi vers CISCO :
ylgmQ[BXD4yYShrZ4i1SwVmpeRiW]rm1begMVzYpV4J]QYwvaGFFdr_iaNIv_qP[FsOc7[J]ttZrUXc1zt_u8hv_[k0xhGrxKTSNZCF5VU4K]26UaHO6ra5J9gHuxN_cF_ab_JDkhBfRoawpaiWoa1NyHrBpZP5wK[FIVpBSKdZlIqzy5X6l6dsIsHI]QWwmSzuZVeWIyDs]BLrzCuYatuml4_zXWMSUEHTSCzZ]aY6fTsHQKkp]nYlH99
envoi vers CISCO :
dsMQvWLx[QcwTBPJ5NDM7G2pF7LHCjME9NH1xDT3_xU2bfj2RVra[vPS96NU_F6xp58OFQrkbxmxOBbsgeHYBWjiko0gnDrmFM0ZqvtKloZZXh5J4PCrNJUhPB]SrZqD4P6Gx84B0NOj[x7eC9JK4JtOQN3Je4X4RsuAbhIfgZCtv_sKNWoIcO]4lsv_RYOn]1NqmDOfVG]uorI516VXIx6xCTBph92DtVksC_wMmwW22bl0uQMlPZfqc1
envoi vers CISCO :
VZ
Dernière modification par Watael (Le 10/01/2017, à 08:08)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne