Ottenere il Giorno Della Settimana in bash script

Voglio avere il giorno della settimana nella variabile DOW.

In modo da utilizzare il seguente bash-script:

DOM=$(date +%d)
DOW=($($DOM % 7) ) | sed 's/^0*//'

Purtroppo non ricevo l’errore: bash: 09: command not found. Il risultato previsto è di 2 ( 9 % 7 = 2) nella variabile $DOW.

Come posso ottenere questo lavoro?
Funziona per i giorni da 1 a 8, ma a causa della C-hex, non c’è nessun numero su 8 disponibili e viene visualizzato il seguente messaggio: bash: 09: value too great for base (error token is "09").

  • Non è chiaro ciò che si desidera. Se è il giorno della settimana, perché si prevedono 2 da oggi mercoledì?
  • Il problema principale è che la bash () math parser di espressioni erroneamente assume 0 prefisso numeri ottali, che non è un problema per 1-7, ma un male per 08 e 09. Provare expr invece.
InformationsquelleAutor bbholzbb | 2014-04-09

 

4 Replies
  1. 2

    Utilizzando una diversa %-identificatore è la vera risposta alla tua domanda. Il modo per evitare che la bash da soffocamento su voci di numeri ottali è per dire che in realtà hanno un numero di base 10:

    $ DOM=09
    $ echo $(( DOM % 7 ))
    bash: 09: value too great for base (error token is "09")
    $ echo $(( 10#$DOM % 7 ))
    2
  2. 0

    Ho sempre trovato che l’uso di ‘lasciare’ è la soluzione più semplice per BASH. In modo che sarebbe:

    let "DOW = DOM % 7"
  3. -5

    È possibile utilizzare il - bandiera:

    DOM=$(date +%-d)
                 ^

    che avrebbe impedito il giorno dall’essere imbottito con 0.

    Da man date:

       -      (hyphen) do not pad the field

    Osservare la differenza:

    $ DOM=$(date +%d)
    $ echo $((DOM % 7))
    bash: 09: value too great for base (error token is "09")
    $ DOM=$(date +%-d)
    $ echo $((DOM % 7))
    2
    • Il giorno del mese modulo 7: non giorno della settimana!
    • buona risposta la domanda sbagliata :p

Lascia un commento