私の主張を正しく使用しているかどうかはわかりません。文字列を含むテキストファイルであるパラメータを渡したいです。このスクリプトを実行すると、文字列が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>
。まだベンチマークしていませんが、長さを確認するためにファイルのすべてのバイトをメモリにロードするよりも、メタデータを直接読み取る方が合理的です。