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)
这个脚本工作正常,但似乎有太多的口是心非。我想知道是否有更好(更优雅)的方法来做到这一点。所有步骤1来n都是一样的。唯一的区别是< $1末尾是否有a 。没有更好的方法吗?
函数是减少代码重复的通用方法。这个案子没什么不同。您只需要定义一个函数来实现您的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)