理解这个unix脚本

时间:2012-01-21 09:07:46

标签: bash unix

这个脚本是我的导师写的,但我不明白。 有人可以向我解释一下。

#!/bin/bash
find $1 -size +${2}c -size -${3}c

此脚本假设接受三个命令行参数:目录名,最小文件大小(以字节为单位)和最大文件大小(以字节为单位)。因此,在运行它时,它将是这样的:

./script.sh /home/Desktop/file 5000 10000

然后5000到10000之间的文件大小将回显到屏幕上。

任何人都知道另一种方式吗?

2 个答案:

答案 0 :(得分:2)

#!/bin/bash
find $1 -size +${2}c -size -${3}c
    |___|     |_____|       |_____|
      |          |             |
This is the    This is      This is the
first argument the second   third argument
passed while    argument
 running the
  script

find实用程序语法是在specified path搜索可根据所选options识别的文件。

-size n[ckMGTP]
 True if the file's size, rounded up, in 512-byte blocks is n.  
 If n is followed by a c, then the primary is true if the 
 file's size is n bytes (characters).  

+前面使用second argument表示我们正在查找文件greater,然后查找指定的数字。同样-表示要显示的文件应小于指定的大小。

通过向您的脚本传递三个参数,意味着我们将$1作为要搜索的路径,在您的情况下为/home/Desktop/file。第二个参数定义了文件应该大于指定参数5000的条件。最后一个参数用于指定文件应小于指定的大小10000

希望这有帮助!

答案 1 :(得分:0)

这个脚本按照老师的说法运行。

错误"find: Invalid argument +c to -size.是因为您没有通知脚本的第二个参数。然后$ {2}没有值,脚本尝试执行:

find your_path -size +$c -size -$c

您可以修改脚本以check for number or arguments

#!/bin/bash
EXPECTED_ARGS=3
E_BADARGS=65
HLP_ARG="path min_size max_size"
if [ $# -ne $EXPECTED_ARGS ]
then
  echo "Usage: `basename $0` $HLP_ARG"
  exit $E_BADARGS
fi    

find $1 -size +${2}c -size -${3}c