如何通过指定输入输出文件在终端运行Bash脚本?
实现方法
你可以通过在脚本中添加命令行参数解析逻辑,用getopts工具处理-i和-o选项,替换掉原来硬编码的文件名,具体修改如下:
1. 添加参数解析代码
在脚本开头(#! /bin/bash之后)加入参数解析部分,定义输入输出文件变量,处理用户传入的选项:
#! /bin/bash # 定义默认文件名(用户不指定时沿用原脚本的默认值) input_file="test.tsv" output_file="Out.tsv" # 解析命令行选项 while getopts "i:o:" opt; do case $opt in i) input_file="$OPTARG" ;; o) output_file="$OPTARG" ;; \?) echo "无效选项: -$OPTARG" >&2; exit 1 ;; :) echo "选项 -$OPTARG 需要指定文件名参数" >&2; exit 1 ;; esac done
2. 替换硬编码文件名并增强健壮性
把原脚本里的固定文件名换成变量,同时加入输入文件存在性检查,避免读取不存在的文件报错。修改后的完整脚本:
#! /bin/bash # 定义默认输入输出文件 input_file="test.tsv" output_file="Out.tsv" # 解析命令行选项 while getopts "i:o:" opt; do case $opt in i) input_file="$OPTARG" ;; o) output_file="$OPTARG" ;; \?) echo "无效选项: -$OPTARG" >&2; exit 1 ;; :) echo "选项 -$OPTARG 需要传入文件名参数" >&2; exit 1 ;; esac done # 检查输入文件是否存在 if [ ! -f "$input_file" ]; then echo "错误:输入文件 $input_file 不存在" >&2 exit 1 fi awk 'BEGIN { # 保留你的实际处理逻辑 do some job }' "$input_file" | awk 'BEGIN { do some job }' | awk 'BEGIN { do some job }' | awk 'BEGIN { do some job }' > "$output_file"
关键说明
getopts "i:o:"表示识别-i和-o选项,冒号:代表选项必须跟参数;- 用双引号包裹变量
"$input_file"和"$output_file",避免文件名包含空格或特殊字符时出现异常; - 保留默认文件名逻辑,用户不指定参数时,脚本仍能按原方式运行。
使用方式
在终端执行指定参数的命令:
bash myscript.sh -i your_input.tsv -o your_output.tsv
如果想用默认文件,直接执行:
bash myscript.sh
内容的提问来源于stack exchange,提问作者Debajyoti Kabiraj
相关产品推荐
相关产品推荐

