請原諒,因爲我是UNIX初學者。Unix shell提示用戶輸入文件名
我想編寫一個shell腳本,它可以讓用戶鍵入文件名和輸出在該文件中的行數,這裏是我的代碼:
echo "Pls enter your filename:"
read filename
result=wc -l $filename
echo "Your file has $result lines"
但是,我無法得到它,因爲工作它抱怨標識符「文件名」。專家能幫忙嗎?謝謝!
請原諒,因爲我是UNIX初學者。Unix shell提示用戶輸入文件名
我想編寫一個shell腳本,它可以讓用戶鍵入文件名和輸出在該文件中的行數,這裏是我的代碼:
echo "Pls enter your filename:"
read filename
result=wc -l $filename
echo "Your file has $result lines"
但是,我無法得到它,因爲工作它抱怨標識符「文件名」。專家能幫忙嗎?謝謝!
工作正常,至少在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。不同的炮彈有不同的做事方式。
如果你要評估廁所-l $文件名,你必須做T:
result=$(wc -l $filename)
否則,結果=廁所-l $文件名,bash將分配WC導致,並解釋下一個單詞(-l)作爲運行命令。
在這裏你去:
echo "Pls enter your filename:"
read filename
result=`wc -l $filename | tr -s " " | cut -f2 -d' '`
echo "Your file has $result lines"
爲了讓廁所只打印數量,'WC -l <$ filename'似乎比'cat' –
@glennjackman更優雅:你不需要stdin重定向 - 'wc -l $ filename'也能做到這一點:)。 – jmdeldin
@jmdeldin,'wc -l infile'的輸出問題是'12345 infile' - 它也包含輸入文件名。如果你只是想要這個數字,你可以用'awk'(另一個進程)進行後處理,或者使用stdin('cat infile | wc ...',另一個進程或'
paxdiablo