以下是我编写的一些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命令不应该用引号。