2012-09-02 49 views
2

請原諒,因爲我是UNIX初學者。Unix shell提示用戶輸入文件名

我想編寫一個shell腳本,它可以讓用戶鍵入文件名和輸出在該文件中的行數,這裏是我的代碼:

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

echo "Your file has $result lines" 

但是,我無法得到它,因爲工作它抱怨標識符「文件名」。專家能幫忙嗎?謝謝!

回答

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。不同的炮彈有不同的做事方式。

+2

爲了讓廁所只打印數量,'WC -l <​​$ filename'似乎比'cat' –

+0

@glennjackman更優雅:你不需要stdin重定向 - 'wc -l $ filename'也能做到這一點:)。 – jmdeldin

+2

@jmdeldin,'wc -l infile'的輸出問題是'12345 infile' - 它也包含輸入文件名。如果你只是想要這個數字,你可以用'awk'(另一個進程)進行後處理,或者使用stdin('cat infile | wc ...',另一個進程或' paxdiablo

1

如果你要評估廁所-l $文件名,你必須做T:

result=$(wc -l $filename) 

否則,結果=廁所-l $文件名,bash將分配WC導致,並解釋下一個單詞(-l)作爲運行命令。

1

在這裏你去:

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

echo "Your file has $result lines"