Bash 脚本轮换密码

0 command-line bash scripts text-processing

你好,我需要编写一个 bash 脚本旋转密码。不幸的是我现在不能再进一步了。接下来我需要使用 If-Else 条件将字母转换为数字,并按字母移位加 5。有人可以帮我怎么做吗?

谢谢

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

echo $ROT
echo $TEXT

echo "crypted: $CRYPT_TEXT"

for c in $(echo $TEXT | sed -e 's/\(.\)/\1\n/g')
do
  echo $c
done
Run Code Online (Sandbox Code Playgroud)

Tom*_*art 5

可以在 Bash 中使用以下命令转换为大写字母:

TEXT="foobar" 
echo ${TEXT^^}
Run Code Online (Sandbox Code Playgroud)

旋转密码可以使用 来实现tr,例如 rot13:

echo $TEXT | tr 'A-Za-z' 'N-ZA-Mn-za-m'
# sbbone
Run Code Online (Sandbox Code Playgroud)

rot5 看起来像这样:

echo $TEXT | tr 'A-Za-z' 'F-ZA-Ef-za-e'
# kttgfw
Run Code Online (Sandbox Code Playgroud)

没有命令的部分版本tr

#!/bin/bash

TEXT="AZ"

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

  # A-Z is in range:
  # 65-90
  if [[ $shifted -gt 90 ]];then
    # if value is greated than Z letter you need to subtrack 26
    # so that 91 would become letter A
    echo "$shifted val too large"
    corrected=$(( $shifted - 26))
    echo "corrected ord value $corrected"
    printf "\\$(printf '%03o' $corrected)\n"
  fi
done
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

A -> 65
shifted: 70
F
Z -> 90
shifted: 95
_
95 val too large
corrected ord value 69
E
Run Code Online (Sandbox Code Playgroud)

该脚本将字母转换为其相应的 ASCII 代码,执行移位并将代码转换回字母。您需要确保它适用于大写和小写字母(或仅支持其中一种)。我将把剩下的部分作为练习留给好心的读者。