在Bash编程中从标准输入读取

时间:2014-04-26 01:52:26

标签: linux bash input stdin

我一直在为Uni做一个bash编程任务,一切正常,除了Automark软件(黑盒子)给我一个0/5 ..我联系了我的Uni讲师,他回复说:

“似乎有一些关于”从标准输入读取“的含义的混淆。这意味着你从终端的键盘读取而不是从命令行读取....这个错误在histo(之前的程序)中。也似乎是在histoplot。(程序我在这里谈论)“

现在我没有想法,这意味着什么。我已经浏览了整个互联网,我认为我的代码是从标准输入读取的。

这不是“Read Read Line”吗?我的程序获取数据并将其转换为如下所示的Histoplot:

 1 1
 2 3
 3 2
 4 1

并将其变为:

 1 #
 2 ###
 3 ##
 4 #

这是我的代码(抱歉有这么多):

 #!/bin/bash

 addWordcount=0
 customHash=0
 customHashchoice="#"

 scale=0


 for i in $*
 do
         if [[ $i = "-c" ]]
     then
     addWordcount=1 
     elif [[ $i = "-p" ]] 
     then
     customHash=1

     elif [[ $i = "-s" ]]   
     then
     scale=1
         fi
 done
 for x in $*
 do 
 if [ -f $x ] ; then
         while read line    
         do     
             lineAmnt=${line% *}
             hashNo=${line##* }
             for ((i=0; i<hashNo; i++))

            do
            hashes+="#" 
            #hashNumber=$(expr $hashNumber - 1)
            done    
        printf "%3s" $lineAmnt 

        if [[ $addWordcount -eq 1 ]] 
        then
            printf "%5s"$hashNo
        fi

        printf " $hashes\n"
        hashes=""   
    done < $x
     fi
 done

1 个答案:

答案 0 :(得分:2)

while read line从stdin读取,但您使用了重定向。通过编写while read line; do ... done < $x,您将使用$ x命名的文件成为while read循环的标准输入,而不是从您的bash脚本的标准输入读取。也就是说,该脚本的stdin与while循环的stdin不同。

只需省略重定向。