ディレクトリ名を含むパラメータを受け入れ、そのパラメータがあるかどうかを確認するスクリプトを作成しようとしています。スクリプト名はscript_practice_3.shでなければならず、blcをスクリプトに渡す必要があります。例: ./script_practice_3.sh blc
何らかの理由で私のスクリプトがうまくいかない理由はわかりません。私はUnixスクリプトに精通しており、これは本当に残念です。
#!/bin/bash
echo "What is the parameter name that contains the script name: "
read SCRIPT
echo "What is the parameter name that contains the value blc: "
read VALUE
if [ "$?" = "0" ]
then
echo "You must provide one parameter"
elif [ "$?" > "1" ]
then
echo "You must provide only one parameter"
else
test -d $SCRIPT
if [ "$?" = "0" ]
then
echo "Already exists"
else
mkdir $VALUE
echo "directory created"
fi
答え1
特殊変数$?
は終了ステータス最近コマンドを実行しました。スクリプトに与えられた引数の数(位置引数の数)はで与えられます$#
。
>
ある値が他の値よりも数値的に大きいかどうかを比較するためには使用できません。これを行うには、を使用します-gt
。このテストは、文字列のソート順(「ソート後」)>
を決定するテストです。b
a
"b" > "a"
]
また、テストの1つがありません。
また、コマンドラインでスクリプトに単一の引数を提供したい場合は、なぜ2つの値を対話的に読み取るのかわかりません。
提案:
#!/bin/sh
if [ "$#" -ne 1 ]; then
echo need exactly one argument >&2
exit 1
elif [ -d "$1" ]; then
printf '"%s" is already a directory\n' "$1" >&2
exit 1
elif ! mkdir "$1"; then
printf 'failed to create directory "%s"\n' "$1" >&2
exit 1
fi
printf 'Successfully created directory "%s"\n' "$1"
$1
最初の位置引数(スクリプトに指定された最初の引数)はスクリプト全体で使用されます。
mkdir
ここで中間テストは実際には必要ありません。すでに存在するディレクトリを作成しようとすると(オプションなしで)文句を言うので、-p
これは最後のテストでキャッチされます。
あなたの質問に提案されているようにスクリプトが呼び出されます。
./script.sh "some directory name"