你好,我需要编写一个 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
答案1
在 Bash 中可以使用以下方法转换为大写:
TEXT="foobar"
echo ${TEXT^^}
可以使用以下方法实现旋转密码tr
,例如rot13:
echo $TEXT | tr 'A-Za-z' 'N-ZA-Mn-za-m'
# sbbone
rot5 看起来会像这样:
echo $TEXT | tr 'A-Za-z' 'F-ZA-Ef-za-e'
# kttgfw
无命令的部分版本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
输出应如下所示:
A -> 65
shifted: 70
F
Z -> 90
shifted: 95
_
95 val too large
corrected ord value 69
E
该脚本将字母转换为其对应的 ASCII 代码,执行移位并将代码转换回字母。您需要确保它适用于大写和小写字母(或仅支持其中一种)。我将其余部分留给读者练习。