Unix:期望的整数表达式

时间:2013-12-15 01:57:03

标签: bash unix

#!/bin/bash

location=$1
englishCount=0
bourneCount=0
CShellCount=0
symbolicCount=0
emptyCount=0
dirCount=0

if [ ! $# -eq 1 ]; then
echo Need to supply one argument
exit
fi

if [ ! -d $1 ]; then
echo Directory not found
exit
fi


find $location | while read item
do
if [-f "$item" ]
then
    if [ "file $loc/* | grep English | wc -l" -eq 1 ]
        then
        $englishCount=$[englishCount+1]
    elif [ "file $loc/* | grep Bourne | wc -l" -eq 1 ]
        then
        $bourneCount=$[bourneCount+1]
    elif [ "file $loc/* | grep C.Shell | wc -l" -eq 1 ]
        then
        $CShellCount=$[$CShellCount+1]
    elif [ "file $loc/* | grep symbolic | wc -l" -eq 1 ]
        then
        $symbolicCount=$[$symbolicCount+1 ]
    elif
        $emptyCount=$[$emptyCount+1 ]  
elif [ -d "$item" ]
then
    dirCount=$[dirCount+1]
fi
done

echo "English count: " $englishCount
echo "bourne count: " $bourneCount
echo "CShell count: " $CShellCount
echo "symbolic count : " $symbolicCount
echo "empty count: " $emptyCount
echo "Directory count: " $dirCount

我正在尝试创建一个脚本来按类型对目录内容进行排序,但是我得到一个错误,表示期望Integer表达式。 IM的印象是,用于与整数1进行比较的表达式会产生数值但是,我的脚本不能识别它。

1 个答案:

答案 0 :(得分:0)

在第

if [ "file $loc/* | grep English | wc -l" -eq 1 ]

您正在将字符串与数字进行比较。而是尝试

if [ `file $loc/* | grep English | wc -l` -eq 1 ]

后面的滴答声导致“它们之间的东西”作为子进程运行,结果返回到该程序。然后返回的“字符串”(来自wc -l的一些数字输出)变为整数并与1进行比较。

显然,您已对所有类似情况做过这样的事情。