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)
可以在 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 代码,执行移位并将代码转换回字母。您需要确保它适用于大写和小写字母(或仅支持其中一种)。我将把剩下的部分作为练习留给好心的读者。