代码之家  ›  专栏  ›  技术社区  ›  Atif

简单Bash编程

  •  0
  • Atif  · 技术社区  · 15 年前

    我是一个新手,所以请不要介意我愚蠢的问题,因为我不能得到任何好的来源来学习。

    我想创建一个脚本来显示文件名及其大小。代码就是这样的

    filename=$1
    if [ -f $filename ]; then
        filesize=`du -b $1`
        echo "The name of file is $1"
        echo "Its size is $filesize"
    else
        echo "The file specified doesnot exists"
    fi
    

    输出是这样的

    $ ./filesize.sh aa
    The name of file is aa
    Its size is 88  aa
    

    我也想用厕所做同样的事情。

    6 回复  |  直到 15 年前
        1
  •  0
  •   paxdiablo    15 年前

    这里接受不同层次的问题。

    awk 仅获取第一个字段:

    du -b /path/to/file | awk '{print $1}'
    

    你的剧本应该是这样的:

    filename=$1
    if [ -f ${filename} ]; then
        filesize=$(du -b ${filename} | awk '{print $1}')
        echo "The name of file is ${filename}"
        echo "Its size is ${filesize}"
    else
        echo "The file specified does not exists"
    fi
    

    • 我更喜欢 $(X) 为了捕获命令的输出,只需使用“X”,因为它们更容易嵌套。
    • $1 进入之内 $filename $文件名 从那时起
    • ${} 所以读者和shell都很清楚 ${var}X $var X ,而不是$varX是不存在的${varX}。

        2
  •  3
  •   unbeli    15 年前

    使用stat(1)

    filename=$1
    if [ -f $filename ]; then
        filesize=`stat -c %s $1`
        echo "The name of file is $1"
        echo "Its size is $filesize"
    else
        echo "The file specified doesnot exists"
    fi
    

    另请参见 man 1 stat

        3
  •  1
  •   sepp2k    15 年前
    filesize=`du -b $1 | cut -f 1`
    

    cut -f 1 按制表符拆分其输入,然后输出第一个字段(即,它返回 du

        4
  •  0
  •   Matthew Mott    15 年前

    你可以用 在第一个空格处分割du的输出,如下所示:

    filesize=`du -b $1 | awk '{ print $1; }'`
    
        5
  •  0
  •   user44556    15 年前

    du -b $1 使用 du -b $1 | cut -f 1 . 它只包含du命令输出的第一个字段,因此只报告文件的大小。

        6
  •  0
  •   kasperjj    15 年前

    filesize=`du -b $1 | awk '{print $1}'`
    
    推荐文章