![如何将作为参数传递的文件的大小与兆字节数进行比较?](https://linux22.com/image/140958/%E5%A6%82%E4%BD%95%E5%B0%86%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E7%9A%84%E6%96%87%E4%BB%B6%E7%9A%84%E5%A4%A7%E5%B0%8F%E4%B8%8E%E5%85%86%E5%AD%97%E8%8A%82%E6%95%B0%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83%EF%BC%9F.png)
我有一个使用文件或目录作为参数的脚本,我想将该文件与任意数量的兆字节进行比较,以查看该文件是否大于、小于或等于 1 兆字节。
我认为答案是:
#!/bin/bash
FILE=$1
export FILE1
if [ -f$1 ];
then
echo "Hello world!"
fi
if [ $# -lt 1 ]; then
echo "This file is less than 1 megabyte"
fi
我正在尝试将此文件作为参数传递,并查看它是否小于一兆字节。现在,我需要知道 $# -lt 1 实际上是否小于 1 兆字节或小于整数 1。
答案1
正如一些评论者/回答者所说,您的脚本没有获取传入文件的大小。您需要这样做才能将其与兆字节进行比较。
一种选择是stat
命令:
bytes=$(stat -c %s filename_here)
另一个选项是wc
命令:
bytes=$(wc -c < filename_here)
接下来,您想将其与 1 MB 进行比较; bash 算术仅限于整数,因此尝试与小数进行比较注定会失败。相反,请与 1048576 字节进行比较。
总结一下,它可能是:
#!/bin/bash
if [ -f "$1" ];
then
echo "Hello world!"
bytes=$(stat -c %s "$1")
if [ "$bytes" -lt 1048576 ]; then
echo "This file is less than 1 megabyte"
fi
fi
我将大小计数移到了第一个if
语句中;检查不存在的文件的大小是没有意义的。另外,除非您对参数执行其他操作,否则实际上没有必要使用另一个变量名,所以我只是继续使用$1
.
答案2
您的脚本中存在逻辑和语法错误。
- 您分配
FILE
并导出FILE1
(不会造成伤害,但也没有意义)。 - 你既不使用
FILE
也FILE1
不再使用(相同)。 - 您需要在“条件主”和文件名之间有一个空格
[ -f$1 ]
- 产生
$#
脚本的参数计数,而不是文件大小(正如 Filipe Brandenburger 已经指出的那样) - 除了
stat
您可以使用的信息之外,您还需要一个替代信息源du -b file