konvertiere string im bash script in integer
In eine text-Datei, test.txt ich habe die nächsten Informationen:
sl-gs5 desconnected Wed Oct 10 08:00:01 EDT 2012 1001
Möchte ich extrahieren Sie die Stunde der Veranstaltung durch die nächste Befehlszeile:
hour=$(grep -n sl-gs5 test.txt | tail -1 | cut -d' ' -f6 | awk -F ":" '{print $1}')
und ich bekam "08". Wenn ich versuche, fügen Sie 1,
14 echo $((hour+1))
Erhalte ich die nächste Fehlermeldung:
./test2.sh: line 14: 08: value too great for base (error token is "08")
Wenn die Variablen in der Bash sind nicht typisiert, warum?
InformationsquelleAutor der Frage RobertoFRey | 2012-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen ARITHMETISCHE AUSWERTUNG in
man bash
:Können Sie entfernen Sie die führende null durch parameter expansion:
oder force base-10 interpretation:
InformationsquelleAutor der Antwort choroba
was ich nennen würde ein hack, aber angesichts der Tatsache, dass Sie nur die Verarbeitung Stunde-Werte, die Sie tun können,
mit wenig Risiko.
IHTH.
InformationsquelleAutor der Antwort shellter
Könnten Sie auch
bc
InformationsquelleAutor der Antwort makim
Hier ist eine einfache Möglichkeit, wenn auch nicht der schönste Weg, um einen int-Wert für einen string.
Beispiel
InformationsquelleAutor der Antwort jbrahy
Führende 0 führt dazu, dass die bash versucht, zu interpretieren, Ihre Zahl als eine oktale Zahl, aber oktale zahlen 0-7, und 8 ist somit ein ungültiges token.
Wenn ich du wäre, würde ich hinzufügen, ein wenig Logik zu entfernen eine führende 0 hinzufügen, und erneut hinzufügen, die führende 0 wenn das Ergebnis ist " < 10.
InformationsquelleAutor der Antwort Charles Addis
Wie zu sed?
InformationsquelleAutor der Antwort Feng Xue
Seit Stunden sind immer positiv, und immer 2-stellig, können Sie eine 1 davor und subtrahieren 100:
entspricht
Sicher sein, zu kommentieren, wie gymnastik. 🙂
InformationsquelleAutor der Antwort user unknown