我无法从其他函数shell脚本中的函数获得价值

时间:2019-01-23 13:09:41

标签: shell unix

我正在尝试通过以下功能获取月份作为数字:

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
}

但是当我调用函数monthly_backup时,我的文件创建为: connectivity _ 而不是 connectivity_01 ,即使我在运行monthly_backup之前运行了get_month函数。

但是,如果我直接在终端上运行get_month函数,则可以运行echo $ MON并获得正确的值,即01,您知道如何处理吗?可能还没有初始化,实际上我不知道。谢谢!

1 个答案:

答案 0 :(得分:2)

使用函数时,请勿通过设置全局变量来返回计算结果。您确实尝试过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);