forループを使用して、現在のディレクトリにある各ファイルの行数を計算しますか?

forループを使用して、現在のディレクトリにある各ファイルの行数を計算しますか?
  • 引数が入力として提供される場合、スクリプトはその入力ファイルの行数のみを確認する必要があります。そうでない場合、スクリプトはそのディレクトリ内の各ファイルの行数を表示する必要があります。
  • スクリプトファイルは無視する必要があります。つまり、スクリプトファイルの数を表示しないでください。

私は試した:

#!/bin/bash
if [ $# -eq 0 ]
then
        for l in *.txt
        do
                echo $(wc -l $l)
        done
else
        for l in $*
        do
                echo $(wc -l $l)
        done
fi

ただし、ファイル形式(例:* .txt)を明示的に言及することは許可されていません。スクリプトファイルを除くすべてのファイルを確認する必要があります。

ベストアンサー1

ほとんど理解していると思います。あなたはbasename "$0"それを使用することができますスクリプト内のスクリプト名の検索を除くすべての項目の行数を印刷します。

#!/bin/bash
if [ $# -eq 0 ]
then
    for k in *
    do
        if [[ ! -d "$k" && "$k" != `basename "$0"` ]]
        then
            wc -l "$k"
        fi
    done
else
    for k in $*
    do
         wc -l "$k"
    done
fi

私は自由を取る

  • k代わりに使用してくださいl(変数名にはお勧めできません。リンクが見つかりませんがわかります(、1と混同される可能性がありますI))。
  • インデントには8つのスペースではなく4つのスペースを使用します。もちろん、最終決定はあなたの分け前ですが、8つより4つのスペースがより読みやすいと言いたいです。
  • 変数を参照してください。変数名をスペースで区切らないことをお勧めします。
  • echo@Sergが指摘したように、不要なコンテンツを削除します。

編集するif条件だけでなく、それを無視するために二重括弧とディレクトリテストを追加しました。

おすすめ記事