Bash脚本,stdin

时间:2014-11-28 19:22:27

标签: bash input arguments

我这里有一个小问题。

我写了一个脚本,工作正常。但是有一个小问题。

该脚本需要1或2个参数。第二个参数是.txt文件。

如果你写的是my_script arg1 test.txt之类的东西,脚本就可以了。但是当你写my_script arg1 < test.txt时却没有。

以下是我的代码演示:

#!/bin/bash

if [[ $# = 0 || $# > 2 ]]
then
    exit 1
elif [[ $# = 1 || $# = 2 ]]
then
    #do stuff

    if [ ! -z $2 ]
    then
        IN=$2
    else
        exit 3
    fi
fi

cat $IN

如何使其与my_script arg1 < test.txt一起使用?

2 个答案:

答案 0 :(得分:2)

如果您只想更改my_script的调用方式,请让catmyscript的标准输入读取,不要给它任何参数:

#!/bin/bash

if [[ $# != 0 ]]
then
    exit 1
fi
cat

如果您希望脚本与 myscript arg1 < test.txt myscript arg1 test.txt配合使用,只需检查参数数量并采取相应措施。

#!/bin/bash

case $# in
   0) exit 1 ;;
   1) cat ;;
   2) cat $2 ;;
esac

答案 1 :(得分:0)

如果你看看bashnative implemented their cat的那些人你应该如何使用&#39;阅读&#39;获取管道内容..

例如。做这样的事情:

   while read line; do
      echo -n "$line"
   done <"${1}"

HTH,

bovako