3

私はUNIX初心者ですのでご容赦ください。

ユーザーにファイル名の入力を求め、そのファイルの行数を出力できるシェルスクリプトを作成したいのですが、コードは次のとおりです。

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

echo "Your file has $result lines"

しかし、識別子「ファイル名」について文句を言うので、動作させることができませんでした。専門家がお手伝いできますか?ありがとう!!

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ます。

たとえば、次の5行のスクリプト:

#!/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しているシェルを指定する必要があります。シェルが異なれば、物事のやり方も異なります。

于 2012-09-02T09:12:52.963 に答える
1

wc -l $ filenameを評価する場合は、次のことを行う必要があります。

result=$(wc -l $filename)

それ以外の場合、result = wc -l $ filenameを使用すると、bashはwcをresultに割り当て、次の単語(-l)を実行するコマンドとして解釈します。

于 2012-09-02T09:12:49.827 に答える
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 に答える