由于我是UNIX初学者,请多包涵。
我想编写一个shell脚本,可以让用户输入文件名并输出该文件中行数的数量。以下是我的代码:
echo "Pls enter your filename:"
read filename
result=wc -l $filename
echo "Your file has $result lines"
然而,由于标识符“filename”引起了问题,我无法让它工作。 专家能帮忙吗?谢谢!!
这在bash
中可以正常工作。好的,read
可以正常工作。然而,对于result
的赋值可能应该是:
result=$(wc -l $filename)
但是,由于该命令同时输出行数和文件名,您可能需要稍微更改一下,只获取行数,例如:
result=$(cat $filename | wc -l)
或者:
result=$(wc -l <$filename)
您所拥有的命令:
result=wc -l $filename
该命令将会把result
设置为字面值wc
,并尝试执行-l
命令。
例如,以下五行脚本:
#!/bin/bash
echo "Pls enter your filename:"
read filename
result=$(cat $filename | wc -l)
echo "Your file has $result lines"
当运行并将其名称作为输入时,将生成以下内容:
Your file has 5 lines
如果你没有使用bash
,你需要指定你正在使用哪个shell。不同的shell有不同的做事方式。
这是您需要的:
echo "Pls enter your filename:"
read filename
result=`wc -l $filename | tr -s " " | cut -f2 -d' '`
echo "Your file has $result lines"
result=$(wc -l $filename)
wc -l $filename
也可以完成任务 :)。 - jmdeldinwc -l infile
的输出是12345 infile
,它包含了输入文件名。如果你只想要数字,可以使用类似awk
的后处理方式(另一个进程),或者使用stdin来删除文件名(cat infile | wc ...
,另一个进程,或者使用< infile
不需要额外的进程)。 - paxdiablo