Я не могу получить значение из функции внутри другого скрипта оболочки функции - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь получить месяц как число с помощью этой функции ниже:

get_month(){
    # Converter o mes para numeros para criacao de arquivo
    case "`date | awk '{print $2 }'`" in
        Jan) MON=01 ;;
        Feb) MON=02 ;;
        Mar) MON=03 ;;
        Apr) MON=04 ;;
        May) MON=05 ;;
        Jun) MON=06 ;;
        Jul) MON=07 ;;
        Aug) MON=08 ;;
        Sep) MON=09 ;;
        Oct) MON=10 ;;
        Nov) MON=11 ;;
        Dec) MON=12 ;;
    esac

    return $MON;
}

внутри второй функции ниже:

# Rotina de backup mensal
# Funcao para backup mensal dos arquivos
monthly_backup(){
    # Get month to create files that depending this info.
    get_month;
    cd /root/bkp/weekly

    if [[ $(date -d "-1 day" +%m) != $(date +%m) ]]; then
        zip /root/bkp/monthly/connectivity_$MON.zip  connectivity_* && rm -rf /root/bkp/weekly/connectivity_*
    else
        printf "Monthly nao rodara."
    fi

    if [ $? -eq 0 ]; then
        printf '\e[92m Arquivos mensais zipados, e excluidos com sucesso \n'
    else
        printf '\e[92m Monthly Zip failed \n'
    fi
}

но когда я вызываю функцию month_backup, мой файл создается как: connectivity_ вместо connectivity_01 , даже если я запускаю функция get_month перед запуском ежемесячно_backup.

Но если я запускаю функцию get_month непосредственно на моем терминале, я могу запустить echo $ MON и получить правильное значение, равное 01, у вас есть идея, как я могу справиться с этим? вероятно, это не инициализация, на самом деле я понятия не имею. спасибо !!

1 Ответ

0 голосов
/ 24 января 2019

Когда вы используете функцию, не возвращайте вычисленные результаты, устанавливая глобальную переменную. Вы пробовали return $MON, но это будет возвращаемое значение (что вы можете увидеть с помощью echo $?), и оно должно отражать успех / некоторую ошибку.
Используйте echo "$MON" для возврата результата и MON=$(get_month).

Используя имена переменных в нижнем регистре и более короткую дату, как показано в комментариях, вы получите

get_month() {
    # Converter o mes para numeros para criacao de arquivo
    local_mon=$(date '+%m')
    echo "${local_mon}"
}
# ....
# Rotina de backup mensal
# Funcao para backup mensal dos arquivos
monthly_backup(){
    # Get month to create files that depending this info.
    mon=$(get_month);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...