#
# if MAXFILES is not set, set to 10
#
if [ -z "MAXFILES" ]
then
MAXFILES=10
fi
#
# now check to see if the number of files being removed is > MAXFILES
# but only if MAXFILES = 0
#
if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
then
# if it is, prompt user before removing files
echo "Remove $# files (y/n)? \c"
read reply
if [ "$reply" = y ]
then
rm "$@"
else
echo "files not removed"
fi
else
# number of args <= MAXFILES
rm "$@"
fi
上記のプログラムからファイルを削除する必要があります。ただし、実行しようとすると、次のように表示されます。
行15:[::整数式が必要です。
ベストアンサー1
それが問題です:
if [ -z "MAXFILES" ]
then
MAXFILES=10
fi
# ...
if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
文字列がMAXFILES
ゼロであることを確認しています。そうでないため$MAXFILES
設定されていないので、その後のテストは次のように語彙的に解析されます。
if [ $# -gt "" -a "" -ne 0 ]
これが整数が必要だと文句を言う理由です。
あなたがしたいことはこれです:
if [[ -z "$MAXFILES" ]]; then
MAXFILES=10
fi
違いは欠けているドル記号です。また、私は良い内蔵の健全性チェックがあり、テストよりも一般的であるため、[[ ]]
テスト[ ]
(使用時)を好む傾向があります。bash
[
test