如何编写接收3个参数的Bash脚本,在指定类型文件中搜索含指定词的行
Bash 脚本解决方案
完整可运行脚本
#!/bin/bash # 校验入参数量 if [ "$#" -lt 3 ]; then echo "参数不足,正确用法:$0 <目标文件夹路径> <文件后缀> <搜索关键词>" exit 1 fi folder_name="${1}" type_file="${2}" word="${3}" echo "包含关键词「${word}」的行如下:" # 核心搜索逻辑,兼容性更强的find+grep方案 find "${folder_name}" -type f -name "*.${type_file}" -exec grep -h "${word}" {} +
如果你偏好更简洁的写法,也可以把核心搜索部分换成grep原生方案:
# 核心搜索逻辑,grep原生递归方案 grep -r -h --include="*.${type_file}" "${word}" "${folder_name}"
参数适配说明
你给出的示例运行命令./example.sh folder_name hello txt的参数顺序为「目标文件夹→关键词→后缀」,和你最初描述的参数顺序不一致,如果要适配该调用方式,只需要调整变量赋值部分即可:
folder_name="${1}" word="${2}" type_file="${3}"
关键逻辑说明
-h参数:控制grep只输出匹配的行内容,不打印匹配到的文件路径,符合预期输出格式- 所有变量都用双引号包裹,避免路径、关键词包含空格时执行出错
find方案兼容所有Unix-like系统环境,不会出现低版本bash/grep不兼容的问题
内容的提问来源于stack exchange,提问作者user15051177
相关产品推荐
相关产品推荐

