测试文件中字符串的长度

测试文件中字符串的长度

我不确定我是否正确使用了我的论点。我想传递一个参数,它是一个包含字符串的文本文件。当我运行此脚本时,即使字符串的字符数低于 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>。我还没有对此进行基准测试,但对我来说,直接读取元数据更有意义,而不是将文件的每个字节加载到内存中只是为了检查其长度。

相关内容