Pergunta

Ok, então eu preciso para traduzir um script de um bom linux & festa de configuração para ksh no HP-UX. Cada um e cada comando espera uma sintaxe diferente e eu quero me matar. Mas vamos pular o discurso.

Isso faz parte do meu script

anterior=`date +"%Y%0m" -d '1 month ago'`

Basicamente, eu preciso para obter uma data passada em formato 201002. Não importa a coisa que, no novo ambiente, meios% 0m "não zeros", enquanto na verdade, no outro significa "sim, por favor, coloque que zero minha string". Ele mesmo não aceitar o "1 mês". Eu li a data homem para o HP-UX e parece que você simplesmente não pode fazer data aritmética com ele.

Eu estive olhando ao redor por um tempo, mas tudo que eu encontrar são soluções longos. Eu não consigo entender que uma tarefa administrativa, tais típico como a adição de datas precisa de tanta confusão. não há uma maneira de converter o meu one-liner, bem, eu não sei, outro? Vamos lá, eu vi soluções propostas que bc usado, tinha trinta além de linhas e número mágico de todo o script. As soluções mais simples parecem usar perl ... mas eu não sei como modificá-los, como eles são bastante misterioso.

Obrigado!

Foi útil?

Solução 3

Esta é a solução que eu vim para (aviso: Estou trabalhando em um cliente com medidas de segurança draconianas, então eu nem sequer têm uma maneira de testá-lo, eu preciso enviar meus scripts para um administrador de sistema para testá-los e depurar através dele).

typeset -Z2 lastmonth
month=`date +%m`
year=`date +%Y`

lastmonth=$((month-1))
if (( month == 1));then
lastmonth=12
year=$((year-1))
fi

De qualquer forma, parece-me que não há nenhuma maneira mais simples de fazer isso.

Outras dicas

desde a sua é simples caso de ano e mês, você sempre pode criar suas próprias matrizes de data. eg

year=`date +%Y`
month=`date +%m`
anterior=`awk -vm="$month" -vyr="$year" 'BEGIN{
  mth["01"]="12"; mth["02"]="01"
  mth["03"]="02"; mth["04"]="03"
  mth["05"]="04"; mth["06"]="05"
  mth["07"]="06"; mth["08"]="07"
  mth["09"]="08"; mth["10"]="09"
  mth["11"]="10"; mth["12"]="11"
  if ( m=="01") { yr-- }
  print yr mth[m]
}' `
echo $anterior

Mas note que só é simples e serve para produzir apenas previous 1 mês. Você também pode tentar o script ksh aqui

Eu sei que este é um tema antigo, mas eu tive o mesmo problema e esta foi a solução

Crie um script shell, por exemplo, last_month.sh

year=`date +%Y`
month=`date +%m`

month=`expr $month - 1`

if [ $month -eq 0 ]; then
   month=12
   year=`expr $year - 1`
fi

if [ $month -lt 10 ] then
   month="0$month"
fi

echo $year$month
exit 0

então você pode chamar o script e atribuir a uma variável

./last_month.sh | read anterior
echo $anterior

aqui retorna o mês passado, mas você pode facilmente mudar para aceitar parâmetros

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top