我正在尝试通过以下功能获取月份作为数字:
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,您知道如何处理吗?可能还没有初始化,实际上我不知道。谢谢!
答案 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);