我想写一个shell脚本,可以询问用户输入文件名并输出该文件中的行数,这是我的代码:
echo "Pls enter your filename:"
read filename
result=wc -l $filename
echo "Your file has $result lines"
然而,由于它抱怨标识符“filename”,我无法正常工作。专家可以帮忙吗?谢谢!
答案 0 :(得分:4)
这很好,至少在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。不同的贝壳有不同的做事方式。
答案 1 :(得分:1)
如果你想评估wc -l $ filename,你必须这样做:
result=$(wc -l $filename)
否则,使用result = wc -l $ filename,bash会将wc分配给result,并将下一个单词(-l)解释为要运行的命令。
答案 2 :(得分:1)
你走了:
echo "Pls enter your filename:"
read filename
result=`wc -l $filename | tr -s " " | cut -f2 -d' '`
echo "Your file has $result lines"