shell 脚本中的代码重复

Mar*_*ter 2 shell bash shell-script

我的 bash 脚本(让我们称之为myscript)从标准输入(管道)获取输入,或者形成一个常规文件(如果文件名作为参数提供)

a) someprog | myscript

   or

b) myscript file.txt
Run Code Online (Sandbox Code Playgroud)

然后,逐行处理数据。目前,我的代码如下所示:

if [ -t 0 ] ; then
    while read LINE
      do
         prog_1
         prog_2
         ...
         prog_n
      done
else
    while read LINE
      do
         prog_1
         prog_2
         ...
         prog_n
      done < $1
fi
Run Code Online (Sandbox Code Playgroud)

这个脚本工作正常,但似乎有太多的口是心非。我想知道是否有更好(更优雅)的方法来做到这一点。所有步骤1n都是一样的。唯一的区别是< $1末尾是否有a 。没有更好的方法吗?

jor*_*anm 5

函数是减少代码重复的通用方法。这个案子没什么不同。您只需要定义一个函数来实现您的while read逻辑。

myfunc() {
    while read LINE
    do
        prog_1
        prog_2
        ...
        prog_n
    done
}

if [[ -t 0 ]]; then
    myfunc # read stdin passed to the script
else
    myfunc < "$1" # redirect file to stdin
fi
Run Code Online (Sandbox Code Playgroud)