「ファイル名がコマンドライン引数として提供されたと仮定します。」、これはどういう意味ですか?

「ファイル名がコマンドライン引数として提供されたと仮定します。」、これはどういう意味ですか?

ファイルの総単語、文字、行数を示すシェルスクリプトを作成する必要がありますが、ファイル名は「コマンドライン引数として提供されます」。これは何を意味し、どのように使用しますか?

答え1

ファイル名がコマンドライン引数として指定されると、スクリプトは次のように呼び出されます。

./myscript.sh some-file-name

つまり、ファイル名がコマンドラインに引数として提供されます。

したがって、スクリプトリストの最初の要素は位置パラメータファイル名は自動的に入力されます。位置パラメータは$1、などの値です(これらのものがあります)。この場合、単に何か(与えられたファイル名)が含まれています$2$3$#$1

スクリプトで特定のファイル名を使用するには、を使用します"$1"。コードを読みやすくするには、名前付きシェル変数に割り当てます。

#!/bin/sh

# Pick out the filename given on the command line.
name=$1

# Verify that the given name is indeed a (regular) file,
# or a symbolic link to a regular file.
if [ ! -f "$name" ]; then
    # It's not, so output error message and exit.
    printf 'The given name "%s" is not a regular file!\n' "$name" >&2
    exit 1
fi

printf 'The given filename is "%s"\n' "$name"

上記のスクリプトはまた、指定されたファイル名が存在し、通常のファイル(つまりディレクトリではない)か、通常のファイルへの有効なシンボリックリンクであるかを確認します。


注:ユーザーが1つ以上のファイル名を指定する必要があるスクリプトを作成するときは、上記の例のように、コマンドラインからファイル名を取得するようにスクリプトをソートすることをお勧めします。別の方法は、対話形式でファイルからファイル名を読み取ることです。これは、ユーザーが正しいファイル名を提供するためにシェルのファイル名ワイルドカードおよび/またはタブ補完機能を使用できないため、ユーザーにとって厄介です。一部のファイル名を対話形式で入力することができない場合があります。


欲しいなら特徴テキストファイルの単語、文字、行数を数えると、このwcユーティリティはその操作を実行します。

$ wc .zsh_history
    7824   35317  333801 .zsh_history

上記の例では、ファイルには.zsh_history7824行、35317単語、333801文字が含まれています。

システムを確認してくださいman wc

関連情報