Unix shell提示用户输入文件名

时间:2012-09-02 09:10:29

标签: shell unix

请原谅,因为我是UNIX初学者。

我想写一个shell脚本,可以询问用户输入文件名并输出该文件中的行数,这是我的代码:

echo "Pls enter your filename:"
read filename
result=wc -l $filename

echo "Your file has $result lines"

然而,由于它抱怨标识符“filename”,我无法正常工作。专家可以帮忙吗?谢谢!

3 个答案:

答案 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"