我目前正在进行一系列练习,试图提高我的 bash 脚本知识。
我正在进行的练习如下:编写一个名为 encrypt.sh 的脚本,用于加密文件。以下是脚本的要求:
- 它必须使用 openssl 来加密文件。
- 它必须将要加密的文件名作为参数
- 当它加密文件时,它必须将加密版本放入同名但附加“.enc”的文件中。
- 与其他用户一起在系统上运行必须是安全的。也就是说,它不能将任何密码作为命令行参数传递。
- 它必须从名为 ENCRYPTION_KEY 的环境变量中读取要使用的密码。
- 如果未设置该环境变量,则应提示用户输入密码并使用该密码。
- 如果未提供参数,则应显示错误并以退出代码 2 退出。
- 如果用户使用 --help 开关调用脚本,它应该显示一条消息。
- 它应该适用于名称中带有空格的文件。
我觉得我现在的脚本已经满足了要求1-5,7-8。不过我对6和9有点困惑。
任何有关我当前工作的反馈或针对我缺失的需求的解决方案将不胜感激。
先感谢您。
usage="Usage: Enter the name of the file you would like to encrypt as a parameter, eg. $0 words"
ENCRYPTION_KEY="1234"
export ENCRYPTION_KEY
openssl enc -e -aes256 -in "$1" -out "$1".enc -pass env:ENCRYPTION_KEY
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
echo $usage
fi
if test -z ${1}
then
echo "${0} :ERROR: No parameters provided. Please see -h or --help for usage." 1>&2
exit 1
fi
#DECODE (script is not required to decode, just here for testing purposes)
#openssl enc -d -aes256 -in words.enc -out words.enc.dec -pass env:ENCRYPTION_KEY
答案1
对于#6,这read
内置函数会有帮助的。对于 #9,请确保变量名称在使用它们的任何地方都用双引号引起来。