You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过指定输入输出文件在终端运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:04:57