在bash中搜索大于1000的数字

在bash中搜索大于1000的数字

我是 bash 初学者,我想解决下一个问题:查找作为命令行参数接收的目录中包含大于 1000 的数字的所有文件。如果命令行不包含任何参数,则显示一条消息并退出。

首先,我只想检查是否有一个数字等于 1000,因为我不知道如何使用 grep 检查它是否更大。这是我的代码:

#!/bin/bash

if [ $0 -eq 0 ]
then
    echo "No arguments"
    exit 0
fi

for filename in $1
do
    if [ -f filename ]
    then
        if grep -q "1000" $filename
            echo $filename
        fi
    fi
done

它在第 3 行和第 15 行引发了一些错误,我不知道为什么。

有人可以帮我吗?

更新的代码:

#!/bin/bash

if [ $1 -eq 0 ]
then
    echo "No arguments"
    exit 0
fi

for filename in $1
do
    if [ -f filename ]
    then
        if grep -q "1000" $filename
        then
            echo $filename
        fi
    fi
done

答案1

$0扩展为脚本的名称,而不是命令行参数。

3.4.2 特殊参数

如果您想检查是否没有命令行参数,可以使用:

if (($#==0)); then
    echo "No arguments" >&2
    exit 1
fi

$#将扩展到命令行参数的数量。另请注意,我们将错误重定向到 stderr 并以代码 1 而不是 0 退出。0 通常表示成功,非零表示错误。

$1永远只是一个选项,因此不需要循环它。另外,您的脚本似乎只应该接收一个目录作为一个参数,虽然这在技术上是一个文件,但它不会通过-f测试。

grep -q "1000" $filename将搜索文件中是否存在1000,并且不会找到任何大于 1000 的数字,除非它们实际上也包含 1000 (即:101000)。

您可以在目录上使用递归 grep 执行正则表达式搜索来查找 1000 或更大的数字:

grep -rE '[1-9][0-9]{3,}' "$1"

这将打印文件名并匹配,但如果您只想打印文件名,您可以执行以下操作:

grep -rEl '[1-9][0-9]{3,}' "$1"

相关内容