我不确定我是否正确使用了我的论点。我想传递一个参数,它是一个包含字符串的文本文件。当我运行此脚本时,即使字符串的字符数低于 32,它也始终会输入 if 语句。
#!/bin/bash
if [ {$1} > 32 ]; then
echo "Error: Password length invalid"
else
echo "okay"
fi
答案1
您可以使用 获取变量的字符串长度${#variable}
。并且您应该在表达式中使用-gt
而不是。>
[
]
#!/bin/bash -
pass=$(cat < "$1") || exit
if [ "${#pass}" -gt 32 ]; then
echo >&2 "Error: Password length invalid"
exit 1
else
echo "okay"
fi
它计算作为第一个参数传递的文件中的字符数(以当前语言环境的编码解释),而不是字节数,尾随换行符除外,因此对于包含一行文本的文件,它给出了那条线。
答案2
您可以使用命令获取文件大小stat -c %s <file>
。我还没有对此进行基准测试,但对我来说,直接读取元数据更有意义,而不是将文件的每个字节加载到内存中只是为了检查其长度。