안녕하세요 친구 여러분, 중첩된 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.
그렇지 않고 디렉터리가 누락된 경우 해당 사실을 보고합니다(각 디렉터리에 대해 디렉터리 하나가 누락됨).
Fail: directory_name/etc
이 경우 결국 부정적인 결과가 반환됩니다.
bin
이제 이 기능은 하위 디렉토리는 있지만 하위 디렉토리는 없는 디렉토리에서 시연됩니다 asdf
.
$ checkDirectories bin asdf
Fail: asdf
$ echo $?
1
$ checkDirectories bin
All directories present.
$ echo $?
0
디렉토리 이름이 함수에 고정되어 있지 않기 때문에 다른 디렉토리 목록과 함께 사용할 수 있습니다. 여기에는 가변 길이 목록이 포함됩니다. (그래서 디렉토리 4개, 10개 또는 하나만 확인할 수도 있습니다.)
제 답변이 앞으로 더 나은 질문을 하시는 데 도움이 되기를 바랍니다.