Alterar um dígito mês para o mês de dois dígitos

1

Eu tenho este script:

day='date +%d'
month='date +%m'
year='date +%Y'
lmonth='expr $month - 1'
if test "$lmonth" = "0"
then lmonth=12
year='expr $year - 1'
fi

O resultado quando eu chamo $lmonth/$year is 9/2012 Como posso fazer a saída 09/2012 ?

Quando o mês é 10, 11 ou 12, não quero que seja 010, 011 ou 012, respectivamente.

Eu quero colocar o $ year e $ lmonth quando eu ligar para uma tabela ou arquivo com período. Por exemplo, table_extra201209.

Como adiciono o zero extra por meses de 1 (janeiro) a 9 (setembro)?

Eu tento toda a resposta aqui, mas umm .. Eu esqueci de mencionar algo .. Eu quero colocar o $ ano e $ lmonth quando eu chamo uma tabela ou arquivo com periode, por exemplo table_extra201209 como colocá-lo naquele com "0" anexar antes de "9" ..? obrigado novamente :)

    
por Ardemis 30.10.2012 / 10:16

2 respostas

2

$ month=5; year=2012 
$ perl -e 'printf"%02d/%04d\n",@ARGV' $month $year
05/2012

Não me lembro se o Bash tem uma função printf ou sprintf, provavelmente tem algo equivalente útil.

Sim, o bash faz

$ month=5
$ year=2012
$ printf "%02d/%04d\n" $month $year
05/2012

ou, se você precisar do resultado em uma variável use -v

$ printf -v expiry "%02d/%04d" $month $year
$ echo  $expiry
05/2012

Além disso, você não precisa invocar date tantas vezes

$ d=$(date '+%Y %m %d %H %M %S')
$ a=( $d )
$ echo ${a[0]}
2012
$ echo ${a[1]}
10
$ echo ${a[2]}
30
$ echo ${a[3]}
09
$ echo ${a[4]}
59
$ echo ${a[5]}
31

Finalmente, date por si só pode dar o que você deseja

$ minsec=$(date "+%M/%S")
$ echo $minsec
03/27

Você provavelmente sabe disso, mas se você diminuir o mês, terá 1 - 1 = 12 e diminuirá o ano e verificará se o número do dia está no intervalo (não 31 de fevereiro, não 29 de fevereiro, a não ser ano bissexto) calendário muda em várias datas em várias localidades). Geralmente, é melhor usar uma linguagem de script que tenha bons módulos de controle de datas.

    
por 30.10.2012 / 10:42
1

Você pode testar se o número é menor que 10 e somente se esse for o caso, adicione um 0 na frente dele. Então, tente anexar o seguinte ao seu script:

[ $lmonth -lt 10 ] && lmonth=0$lmonth
    
por 30.10.2012 / 10:36

Tags