Linux Bash编程中标准输入的读取
我一直在为Uni做一个bash编程任务,一切都正常,除了Automark软件(blackbox)给了我0/5分。。我联系了我的大学讲师,他回答说: “从标准输入读取”的含义似乎有些混淆。这意味着您从终端的键盘而不是从命令行读取…此错误在histo(以前的程序)中。它似乎也在histoplot中。(我在这里谈论的程序) 现在我不知道这意味着什么。我浏览了整个互联网,我认为我的代码是从标准输入读取的 “边读边写”不是这样吗?我的程序获取数据并将其转换为如下所示的历史图:Linux Bash编程中标准输入的读取,linux,bash,input,stdin,Linux,Bash,Input,Stdin,我一直在为Uni做一个bash编程任务,一切都正常,除了Automark软件(blackbox)给了我0/5分。。我联系了我的大学讲师,他回答说: “从标准输入读取”的含义似乎有些混淆。这意味着您从终端的键盘而不是从命令行读取…此错误在histo(以前的程序)中。它似乎也在histoplot中。(我在这里谈论的程序) 现在我不知道这意味着什么。我浏览了整个互联网,我认为我的代码是从标准输入读取的 “边读边写”不是这样吗?我的程序获取数据并将其转换为如下所示的历史图: 1 1 2 3 3 2
1 1
2 3
3 2
4 1
并将其转化为:
1 #
2 ###
3 ##
4 #
这是我的代码(抱歉有这么多):
#/bin/bash
addWordcount=0
customHash=0
customHashchoice=“#”
比例=0
因为我在$*
做
如果[[$i=“-c”]]
然后
addWordcount=1
elif[[$i=“-p”]]
然后
customHash=1
elif[[$i=“-s”]]
然后
比例=1
fi
完成
对于x英寸$*
做
如果[-f$x];然后
读行时
做
lineAmnt=${line%*}
hashNo=${line##*}
为了((i=0;iwhile read line
确实从stdin读取,但您使用了重定向。通过在read line;do…done
时写入,您将使$x中命名的文件成为while read
循环的stdin,而不是从bash脚本的stdin读取。也就是说,该脚本的stdin与stdin不同是while循环的一部分
省略重定向。而read line
确实从stdin读取。stdin并不总是(甚至通常是)一个键盘,但许多人将两者混为一谈。不要让自己陷入认为stdin是一个键盘的陷阱。感谢您的输入!什么是“省略重定向”?删除“<$x”第三行到最后一行?@BarneyChambers:是。<$x
是重定向的一个实例,这要感谢outfile
是输出重定向的一个实例)。
#!/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