3

please pardon since I am a UNIX beginner.

I wanna write a shell script that can ask user type in the filename and output the number of lines in that file, here is my code:

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

echo "Your file has $result lines"

However, I couldn't get it working since it complains about the identifier "filename". Could experts help?Thanks !!

4

3 回答 3

6

这很好用,至少在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有不同的做事方式。

于 2012-09-02T09:12:52.963 回答
1

干得好 :

echo "Pls enter your filename:" 
read filename 
result=`wc -l $filename | tr -s " " | cut -f2 -d' '`

echo "Your file has $result lines"
于 2012-09-02T09:31:38.157 回答
1

如果你想评估 wc -l $filename ,你不必这样做:

result=$(wc -l $filename)

否则,使用 result=wc -l $filename,bash 会将 wc 分配给 result,并将下一个单词 (-l) 解释为要运行的命令。

于 2012-09-02T09:12:49.827 回答