BASHプログラムはファイルを削除し、整数表現が必要です

BASHプログラムはファイルを削除し、整数表現が必要です
#
# 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

おすすめ記事