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

相关内容