スクリプトが機能しない - スクリプトの新機能

スクリプトが機能しない - スクリプトの新機能

ディレクトリ名を含むパラメータを受け入れ、そのパラメータがあるかどうかを確認するスクリプトを作成しようとしています。スクリプト名は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。このテストは、文字列のソート順(「ソート後」)>を決定するテストです。ba"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"

おすすめ記事