LINUX.ORG.RU

не работает bash скрипт

 


0

2

Всем привет

подскажите, не работает скрипт. В итоге в консоль должен получить «ок».Игнорируется «return 1» в условии. Причём если убрать рекурсию то «return 1» работает.

#!/bin/sh

stopVM() {
        echo "Shutdown VM"
        COUNTER=0
                while [[ 0 ]]; do
                        sleep 1
                        echo ${COUNTER}
                        case $1 in
                        0)
                                if [[ ${COUNTER} -eq 10 ]]; then
                                        stopVM 1
                                fi
                                ;;
                        1)
                                if [[ ${COUNTER} -eq 10 ]]; then
                                        return 1;
                                fi
                                ;;
                        esac
                        let COUNTER+=1
                        done;
}

if stopVM 0; then
        echo "ok"
else
        echo "fail"
fi

Или я что-то не понимаю или что то не работает.

Вот например такая же логика, но на с++ работает, как задуманно:

#include <iostream>

int func(int);

int main(){

        if (func(0))
                std::cout << "ok" << std::endl;
         else 
                std::cout << "fail" << std::endl;
        

return 0;
}

int func(int a){
        int k = 0;
        while(true){
        std::cout << k << std::endl;
                switch (a) {
                case 0: if(k == 10) func(1);
                
                case 1: if(k == 10) return true;
                
        } k++; }
}


С этим скриптом много чего нехорошо, лучше сделай на чём умеешь.

Bfgeshka ★★★★★
()

what is fallthrow and why it better then existed solution in most popular programming language.

qulinxao ★★☆
()

http://www.computerworld.com.au/article/279011/a-z_programming_languages_bourne_shell_sh/?pf=1

:)

http://www.computerworld.com.au/article/279011/a-z_programming_languages_bour...

#!/bin/sh

stopVM() {
        echo "Shutdown VM"
        COUNTER=0
                while [[ 0 ]]; do
                        sleep 1
                        echo ${COUNTER}
                        case $1 in
                        0)
                                if [[ ${COUNTER} -eq 10 ]]; then
                                        stopVM 1
                                fi
                                    ;&
                        1)
                                if [[ ${COUNTER} -eq 10 ]]; then
                                        return 1;
                                fi
                                ;;
                        esac
                        let COUNTER+=1
                        done;
}

if stopVM 0; then
        echo $?,"ok"
else
        echo $?,"fail"
fi
qulinxao ★★☆
()

нелокальная переменная и не только. Задумка на C++ кажется тоже должна бы зациклится

#!/bin/bash

stopVM() {
        echo "Shutdown VM" $1
        local COUNTER=0
                while [[ 0 ]]; do
                        sleep 1
                        echo $1 ${COUNTER} 
                        case $1 in
                        0)
                                if [[ ${COUNTER} -eq 10 ]]; then
                                        stopVM 1
                                        return $?
                                fi
                                ;;
                        1)
                                if [[ ${COUNTER} -eq 10 ]]; then
                                        return 0
                                fi
                                ;;
                        esac
                        let COUNTER+=1
                 done;
        
}

if stopVM 0; then
        echo "ok"
else
        echo "fail"
fi

zudwa
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.