Bash 脚本将“字符串”转换为数字

Bash 脚本将“字符串”转换为数字

我需要将字符串更改为整数,因为我用数字检查文件的大小(使用:stat -c%s $filename 提取),请遵循完整的脚本:

#!/bin/bash

# Variable that contain path destination file
path=/sobstitude

# Variable for size
size=1000

# Loop for file scan
for filename in /test/*;
do
    # Take the size of file
    filesize=$(stat -c%s $filename)

# Check if the file is empty
if [ $filesize > $size ]
then

    # Replace file
    mv $filename $path

fi
done

exit 0;

答案1

bash/sh变量包含字符串时,没有严格的整数概念。字符串可能看起来像整数,这就足够了。

stat -c%s $filename应该返回一个看起来像整数的字符串。

就你的情况而言,主要问题在于重定向运算符>(你现在可能在工作目录中有一些文件,其名称是数字)。此代码片段:

[ $文件大小 > $大小 ]

应该

[ "$filesize" -gt "$size" ]

使用双引号括住变量替换和命令替换

答案2

无需“转换”数据类型。您可以使用-gt-lt来比较数字:

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 4000 ]] && echo "bigger" || echo "smaller"
bigger

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 400000 ]] && echo "bigger" || echo "smaller"
smaller

>原则上没有错。你可以使用算术表达式进行比较。

我已经[[代替[扩展功能

请注意,所有变量扩展都应使用双引号。特别是 和$filename$path如果其中任何一个包含空格,您的脚本就会失败。

答案3

伙计们,我改变这个后就解决了:

if ((filesize > size))

现在工作,感谢支持

相关内容