if 문에 fi가 누락되었습니다.

if 문에 fi가 누락되었습니다.

나는 중첩된 if 문이 있는 스크립트를 작성했습니다.

if [ choice = "1" ]; then
        if [ $package == *".tar.gz" ]; then //Could not find fi for this if
        tar -zxvf folder.tar.gz
        if [ $package == *".tar.bz2" ]; then
        tar -xvfj folder.tar.bz2
./configure
make 
make install
elif [ choice = "2" ]; then
dpkg -i package.deb
fi 
//Expected fi

스크립트에서 fi 오류가 발생한 위치를 기록했습니다.

답변1

다음은 사용하려는 일반적인 경우입니다 case.

case $choice in
  (1)
     case $package in
       (*.tar.gz) tar -zxvf folder.tar.gz;;
       (*.tar.bz2) tar -jxvf folder.tar.bz2;;
     esac &&
       ./configure &&
       make &&
       make install
     ;;
  (2)
     dpkg -i package.deb
     ;;
esac

답변2

조건의 기본 구조는 다음과 같습니다.

if [ condition ]; then
    dosomething
fi

다른 사람:

if [ condition ]; then
    dosomething
elif [ condition ]; then
    dootherthing
else
    thelastchancetodosomething
fi

또한 코드의 다음 조건이 잘못된 것 같습니다.

if [ $package == *".tar.gz" ]; then
    tar -zxvf folder.tar.gz
fi

제가 올바르게 이해했다면 다음과 같아야 합니다.

if echo $package | grep -qF ".tar.gz"; then
    tar -zxvf $package
fi

아, 그리고 #댓글 대신 //.

예제를 수정하고 들여쓰기를 개선하여 더 명확하게 만듭니다.

if [ choice = "1" ]; then
    if echo $package | grep -qF ".tar.gz"; then
        tar -zxvf $package
    # You need to close previous `if` with a `fi` you want to use another
    # `if` here below, but we can use `elif`, so we don't need to close it.
    elif echo $package | grep -qF ".tar.bz2"; then
        tar -xvfj $package
    fi
    cd ${package%.*.*} # this removes the .tar.* extension
    ./configure
    make 
    make install
elif [ choice = "2" ]; then
    dpkg -i $package
fi

관련 정보