Puncte:0

Bash Script Rotation Cipher

drapel pt

Bună, trebuie să scriu un cifr de rotație a scriptului bash. Din păcate nu pot merge mai departe acum. În continuare, trebuie să folosesc condiția If-Else pentru a converti literele în numere și pentru a schimba plus 5 după literă. Ma poate ajuta cineva va rog cum sa fac?

Mulțumesc

#!/bin/bash
#ROT=$1
ROT=5
TEXT=2$
CRYPT_TEXT=""

echo $ROT
echo $TEXT

echo „criptat: $CRYPT_TEXT”

pentru c în $(echo $TEXT | sed -e 's/\(.\)/\1\n/g')
do
  eco $c
Terminat
Puncte:6
drapel ie

Conversia în majuscule se poate face în Bash folosind:

TEXT="foobar" 
echo ${TEXT^^}

Un cifr de rotație ar putea fi implementat folosind tr, de exemplu rot13:

echo $TEXT | tr 'A-Za-z' 'N-ZA-Mn-za-m'
# sbbone

rot5 ar arăta astfel:

echo $TEXT | tr 'A-Za-z' 'F-ZA-Ef-za-e'
# kttgfw

O versiune parțială fără tr comanda:

#!/bin/bash

TEXT="AZ"

pentru (( i=0; i<${#TEXT}; i++ )); do
  printf "%s -> %d\n" "${TEXT:$i:1}" \'${TEXT:$i:1}
  printf -v val "%d" \'${TEXT:$i:1}
  deplasat=$(($val + 5))
  echo "deplasat: $deplasat"
  printf "\$(printf '%03o' $deplasat)\n"

  # A-Z este în interval:
  # 65-90
  dacă [[ $shifted -gt 90 ]];atunci
    # dacă valoarea este mărită decât litera Z, trebuie să subtrack 26
    # astfel încât 91 să devină litera A
    echo „$shifted val prea mare”
    corectat=$(( $deplasat - 26))
    echo "valoarea ord corectată $corect"
    printf „\$(printf „%03o” $corectat)\n”
  fi
Terminat

ieșirea ar trebui să arate astfel:

A -> 65
schimbat: 70
F
Z -> 90
schimbat: 95
_
95 val prea mare
valoarea corectată a ord 69
E

Scriptul convertește literele în codurile sale ASCII corespunzătoare, efectuează shift și convertește codurile înapoi în litere. Trebuie să vă asigurați că funcționează pentru litere mari și mici (sau acceptă doar una dintre ele). Restul îl voi lăsa ca un exercițiu pentru cititorul amabil.

drapel pt
problema este că. Trebuie să o rezolv fără comanda tr. Doar cu if și else în pasul următor.
drapel ie
@joshi1999 Utilizarea doar dacă/altfel nu are prea mult sens. Ai scrie cod ca în cazul A, apoi ai tipări E. Ceea ce nu înseamnă prea multă programare. Am adăugat un exemplu bash de iterare peste un text.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.