SIGSEGV无限函数循环



以下是我编写的一些bash代码,其任务是通过给出的目录作为命令行参数进行搜索。它会进行。

#!/bin/bash
counter=0
function search() {
    for x in $1; do
        if [ "$x" == "*.sh" ]; then
            'let counter++'     
            echo "$x":
            cat "$x"
        elif [[ -d "$x" ]]; then
            search "$1";
        fi
    done 
}
search "$1"
if [ $counter -eq 0 ]; then
  echo No files
fi 

当我运行bash脚本时,我会获得带代码11的SIGSEGV - Segmentation fault

我已经通过ShellCheck运行了我的代码,并且没有检测到问题,我研究了使用函数的语法,我认为我是正确的功能,实际上我只是因为我有一个无限的循环而迷失了方向。<<<<<<<<<<<<<<<</p>

主要问题是您要在$ 1上递归,其中应使用$ x。难怪这是一个无限的循环!不过还有其他错误。

#!/bin/bash
counter=0
function search() {
    cd "$1"
    for x in *; do
        if [[ "$x" = *.sh ]]; then
            let counter++
            echo "$x":
            # cat "$x"
        elif [ -d "$x" ]; then
            search "$x";
        fi
    done
    cd ".."
}
search "$1"
echo $counter files found

因此,您需要浏览 *(所有文件(才能查看目录。而且您需要使用[[]]进行模式匹配,并且模式不能以引号为单位。还要注意我们如何将其降低到目录中并再次备份。而Let命令不应该用引号。

最新更新