用于验证文件是否等于数字n的Shell脚本

时间:2014-04-24 09:41:32

标签: bash shell

我是bash编程的新手。这是我的完整问题:编写一个带有成对参数的shell脚本(文件名和数字 n)并且对于每一对将验证文件的大小是否等于数字n。

这是我试图做的事情:

#!/bin/bash


for i in {$1..${@:(-2):1}..2}
    do
for j in {$2..${@: -1}..2}
    do
    if [$(stat -c%s "$i") -eq $j ]
           then
         echo $i is $j
    else
        echo $i is NOT $j
    fi
    done
done

我试图将每对中的文件名和变量i放入每对中的数字n中。然后我将我的文件大小与j(数字n)进行比较。 我不确定我做错了什么,我做了一些研究并测试了我的代码部分以查看它是否有效但是我的for语句有问题,因为它打印整个。输出:

[: -eq: unary operator expected
{c.s..c.s..2} is NOT {12..12..2}

谢谢。

1 个答案:

答案 0 :(得分:0)

3.5.1 Brace Expansion

  

在任何其他扩展之前执行大括号扩展,并且在结果中保留对其他扩展特殊的任何字符。这是严格的文字。 Bash不对扩展的上下文或大括号之间的文本应用任何语法解释。

但这仅适用于bash。在kshzsh,这可行:

$ bash -c 'foo=2; for i in {1..$foo}; do echo $i; done'
{1..2}

$ zsh -c 'foo=2; for i in {1..$foo}; do echo $i; done'
1
2

$ ksh -c 'foo=2; for i in {1..$foo}; do echo $i; done'
1
2