#
# 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
。