こんにちは友達、ネストされたifステートメントを使用してこのメソッドを書き換えるのに役立ちますか?とても感謝しています。
isDiskMounted()
{
if [ -d "/folder1" ] && [ -d "/folder2" ] && [ -d "/folder3" ] && [ -d "/folder4" ];then
echo "true"
else
echo "false"
fi
}
私はこのように書こうとします。
isDiskMounted()
{
if [ -d "/folder1" ]; then
echo "/folder1 klasoru bulundu"
if [ -d "/folder2" ]; then
echo "/folder2 klasoru bulundu"
if [ -d "/folder3" ]; then
echo "/folder3 klasoru bulundu"
if [ -d "/folder4" ]; then
echo "/folder4 klasoru bulundu"
fi
fi
fi
echo "true"
else
echo "false"
fi
}
答え1
純粋にコードレビューの観点から、次のように関数を作成します。
func()
{
for d in /folder1 /folder2 /folder3 /folder4 ; do
if ! [ -d "$d" ] ; then
echo "$d does not exist (or is not a directory)"
return 1
fi
done
echo "all dirs exist"
}
このループを使用すると、新しいディレクトリをリストに追加したり、関数に引数として渡したりするのが簡単になります。
(しかし、関数名が示すように、何かがインストールされていることを確認することが目標であれば、ディレクトリが存在するかどうかをテストすることに大きな利点はありません。)
答え2
あなたの試みで何が間違っているのかを理解するのに役立つように(失敗したものと予想したものを教えてくれません。)推測する)、実行パスを反映する方法でフォーマットするためにコードのインデントを変更しました。
isDiskMounted()
{
if [ -d "/folder1" ]; then
echo "/folder1 klasoru bulundu"
if [ -d "/folder2" ]; then
echo "/folder2 klasoru bulundu"
if [ -d "/folder3" ]; then
echo "/folder3 klasoru bulundu"
if [ -d "/folder4" ]; then
echo "/folder4 klasoru bulundu"
fi
fi
fi
echo "true"
else
echo "false"
fi
}
答え3
あなたの質問が悪すぎて、このコンテストに参加することはできませんでした。
解釈に関する私の見解は次のとおりです。
checkDirectories() {
# a logical switch variable for "all directories positive"
allOk=true
# as long as there are some arguments
while [ "$#" -gt 0 ]; do
# if not -d, report and change the all-switch
[ ! -d "$1" ] && echo Fail: "$1" && allOk=false
# get rid of the first function argument,
# so that "$2" becomes the new "$1"
shift
done
# if all ok, report this. otherwise return negative.
$allOk && echo "All directories present." || return 1
}
この関数はcheckDirectories
ディレクトリを引数として受け取ります(コマンドライン、スクリプトなどから)。同じではないイカチュウの一つ、最初の欠落ディレクトリを返しませんが、すべてのリストを繰り返します。すべてのディレクトリが正常な場合は、次のように印刷されます。
All directories present.
そうでなく、ディレクトリが欠落している場合は、その事実を報告します(各ディレクトリに1つのディレクトリがありません)。
Fail: directory_name/etc
この場合、最終的に否定的な結果が返されます。
bin
この機能は、サブディレクトリは存在しますがサブディレクトリはないディレクトリで実証されますasdf
。
$ checkDirectories bin asdf
Fail: asdf
$ echo $?
1
$ checkDirectories bin
All directories present.
$ echo $?
0
ディレクトリ名が関数に固定されていないため、他のディレクトリのリストと一緒に使用できます。これには可変長のリストが含まれます。 (4つ、10、または1つのディレクトリのみを確認できます。)
私の答えが今後より良い質問をするのに役立つことを願っています。