![使用法メッセージを含むコマンドライン引数](https://linux33.com/image/77423/%E4%BD%BF%E7%94%A8%E6%B3%95%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E5%90%AB%E3%82%80%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E5%BC%95%E6%95%B0.png)
ファイルがコマンドラインに入力されていることを確認するために、スクリプトファイルでコマンドライン引数を使用することには多くの問題があります。デフォルトでは、./fileというスクリプトファイルとlog.logというログファイルがあります。正しいファイルが入力されたことを確認するために、チェックを実行するif then elseステートメントがあります。それ以外の場合、プログラムはエコーエラーで終了します。正しいファイル名を入力すると、スクリプトは引き続き実行されます。私が何をしても、エラーディレクトリまたはファイルが存在しないか、エコーエラーが発生します。誰かが私が間違っていることを指摘できますか?あなたが提供できる助けに感謝します。パテを使用しています。これは私が持っているものです。
if ["./file log"]
then
echo ""
else
echo "error"
exit 0
fi
答え1
スクリプト自体を(自己)参照する必要はありません。あなたはそれが存在しなければならないことを知っています。log
ファイルが存在することを確認するだけです。したがって、-f
テストを使用してください(「ファイルが存在し、通常のファイルです」)。man test
詳細については参考資料を参照してください(test
本質的に同じです[...]
)。
if [ -f "log" ]
then
echo ""
else
echo "error"
exit 0
fi
スクリプトを呼び出すときにファイルが引数として提供されている場合log
(たとえば$ ./file log
)、最初の引数を引用できます$1
。したがって、
if [ -f "$1" ]
答え2
あなたもこれが欲しいでしょう。 $ 0はスクリプト名、$#はパラメータの数です。追加の注:デフォルトでは、スクリプトは成功した場合は0を返し、エラーの場合は<> 0を返します。
#!/bin/bash
display_usage() {
echo "This script must be run with ...."
echo -e "\nUsage:\n$0 [arguments] \n"
}
if [ $# -eq 0 ]; then
display_usage
exit 1
fi
.... script ....
exit 0