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.