1 votos

¿Cómo hacer un bucle con el caso esac en shell scripting?

Me gustaría escribir una secuencia de comandos donde, si un usuario ingresa una ruta que contiene su directorio $HOME , generará un error y la secuencia de comandos se ejecutará hasta que el usuario ingrese una ruta válida en la que el bucle descanso.

Aparentemente da un error de sintaxis si tengo los comandos continue o break . ¿Qué hago mal aquí? Gracias, Jen.

 #!/bin/bash

function project1_install_dir_path() {   

    boolian_2=true; 
    while true; do

    if [ "$boolian_2" = true ] ; then

       read -p "Enter FULL folder path where you want to install colsim1:" fullpath

       echo "you have enterd "$fullpath". Please press 'y' to confirm and 'n' to enter again"

       case "$fullpath" in

       "$HOME"*) echo "Error: The path cannot be in your HOME" ;; continue      
       */home*) echo "Error: The path cannot contain 'home' in the path" ;; continue
       *) echo "you have entered a valid path" ;; break

       esac
       done    
   fi    
}

function main() {

project1_install_dir_path    
}
 

Salida de terminal

 jen@ss23:/bash_file.sh 
-bash: /project/bash_file.sh: line 62: syntax error near unexpected token `newline'
-bash: /project/bash_file.sh: line 62: ` "$HOME"*) echo "Error: The path cannot be in your HOME" ;; continue  
 

2voto

Mike Puntos 1

Usted realmente debe comprobar su sangría. El final de la done y fi instrucciones están en el orden equivocado, aunque su sangría sugiere lo contrario. Otra cuestión es la case declaración. La sintaxis básica es la

case $SOMETHING in
    value1)
        statement1;
        statement2;
        ;;
    value2)
        statement3;
        statement4;
        ;;
esac

Que es: el final de la ;; debe ser realmente el último estado de cuenta para cada caso , e indica su final. Si desea continue en algunos caso, entonces usted necesita para poner ese continue declaración antes de cualquier ;;, así:

#!/bin/bash

function project1_install_dir_path() {   

    boolian_2=true; 
    while true; do
        if [ "$boolian_2" = true ] ; then
            read -p "Enter FULL folder path where you want to install colsim1:" fullpath
            echo "you have enterd '$fullpath'. Please press 'y' to confirm and 'n' to enter again"
            case "$fullpath" in
                "$HOME"*) 
                    echo "Error: The path cannot be in your HOME"; 
                    continue;
                    ;;
                */home*)
                    echo "Error: The path cannot contain 'home' in the path";
                    continue;
                    ;;
                *) 
                    echo "you have entered a valid path";
                    break;
                    ;;
            esac
        fi    
    done    
}

function main() {
    project1_install_dir_path    
}

main;

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: