- 引数が入力として提供される場合、スクリプトはその入力ファイルの行数のみを確認する必要があります。そうでない場合、スクリプトはそのディレクトリ内の各ファイルの行数を表示する必要があります。
- スクリプトファイルは無視する必要があります。つまり、スクリプトファイルの数を表示しないでください。
私は試した:
#!/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
条件だけでなく、それを無視するために二重括弧とディレクトリテストを追加しました。