私は現在の質問の主張とパラメータについて少し混乱しています。
現在は、ログファイル名をパラメータ(たとえば)として受け入れる必要がありますが、パラメータが指定されていない場合、/var/log/secure-<yyyymmdd>
デフォルト値はです。/var/log/secure
ログファイル名をパラメータとして受け入れる方法は?質問の表現かもしれませんが、それが何を意味するのかよく理解していません。
以下は、この質問の前に私が行った現在のコードの一部です。
#!/bin/bash
grep " su: " /var/log/secure | while read -r abc; do
echo "$abc"
done
2番目の部分では、コード2(現在の作業中)で終了する関数を作成し、ファイル名が渡され、ファイルが存在しない場合はその関数を呼び出す必要があります。私はそのようなことをしますか?間違っているようでしたが、何が間違っているのかわかりませんでした。
IF [ -d /var/log/secure ]
then
else
runfunction
答え1
変数を最初のコマンドライン引数に設定するには、次の手順を実行します。
pathname=$1
パラメータが利用できないか空の場合、デフォルト値に設定するには、次を使用します。
pathname=${1:-/var/log/secure}
一般的な形態はです${parameter:-word}
。標準POSIXパラメータ拡張、シェルマニュアルにも文書化されています。
この-d
テストは、指定された文字列が既存のディレクトリパスに対応するか(または既存のディレクトリパスへのシンボリックリンクか)テストします。テスト-f
は通常のファイルに対して同じように機能し、-e
すべての項目を扱います(名前が何であれ、名前が存在する場合はtrue)。
テストの重要性を無効にするには、を使用します!
。
if [ ! -f "$pathname" ]; then
myfunction
fi
または段落構文を使用して
[ ! -f "$pathname" ] && myfunction
myfunction
この関数は、変数の文字列がpathname
既存の一般ファイル(またはそれへのリンク)を指定しない場合に呼び出されます。
デフォルトでコマンドライン引数(パス)を使用し、指定されたパスが既存の一般ファイルと一致しない場合は終了ステータス2で終了する完全なスクリプト。
#!/bin/bash
pathname=${1:-/var/log/secure}
if [ ! -f "$pathname" ]; then
printf 'There is no file called "%s"\n' "$pathname"
exit 2
fi
printf 'The file "%s" exists\n' "$pathname"