2013-04-28 8 views
7

Próbuję sprawdzić, czy jest wersja Ubuntu jest obsługiwany lub nie, oraz w przypadku, gdy tak nie jest, a następnie zaktualizować source.list w APT folderzeBash: porównanie ciąg jako liczba całkowita

wiem że nie mogę użyć <> w [[ ]], więc próbowałem [()], wypróbowałem [], a nawet próbowałem użyć wyrażenia regularnego tam i "-" w zmiennej, ale to nie zadziałało, ponieważ nie mogło znaleźć "pliku: 76" .

Jak mam napisać porównanie do pracy?

Mój kod:

#!/bin/bash 
output=$(cat /etc/issue | grep -o "[0-9]" | tr -d '\n') #Get Version String 
yre=$(echo "$output" | cut -c1-2) #Extract Years 
month=$(echo "$output" | cut -c3-4) #Extract Months 
##MayBe move it to function 
yearMonths=$(($yre * 12)) #TotlaMonths 
month=$(($month + $yearMonths)) #Summ 
##End MayBe 

curMonths=$(date +"%m") #CurrentMonts 
curYears=$(date +"%y") 

##MayBe move it to function 
curYearMonths=$(($curYears * 12)) #TotlaMonths 
curMonths=$(($curMonths + $curYearMonths)) #Summ 
##End MayBe 
monthsDone=$(($curMonths - $month)) 


if [[ "$(cat /etc/issue)" == *LTS* ]] 
then 
    supportTime=$((12 * 5)) 
else 
    supportTime=9 
fi 

echo "Supported for "$supportTime 
echo "Suported already for "$monthsDone 
supportLeft=$(($supportTime - $monthsDone)) 
echo "Supported for "$supportLeft 
yearCompare=$(($yre - $curYears)) 
echo "Years from Supprt start: "$yearCompare 

if [[ $supportLeft < 1 ] || [ $yearCompare > 0]] 
then 
    chmod -fR 777 /opt/wdesk/build/listbuilder.sh 
    wget -P /opt/wdesk/build/ "https://placeofcode2wget.dev/listbuilder.sh" 
    sh /opt/wdesk/build/listbuilder.sh 
else 
    echo "Still Supported" 
fi 
+0

Jak na bok, aby uniknąć [UUCA] (http://partmaps.org/era/unix/award.html) tam, spróbuj 'wyjściowy = $ (grep -o "[0-9]"/etc/issue) '(tak," tr "jest tutaj również całkowicie zbędne). Powinieneś chyba też "grep" dla więcej niż jednej cyfry? – tripleee

+1

W rzeczywistości uzyskanie wersji do odczytu maszynowego z ['lsb_release'] (http://linux.die.net/man/1/lsb_release) jest znacznie prostsze i bardziej niezawodne niż próba przeanalizowania'/etc/issue'. – tripleee

+0

@tripleee możliwe, jak powiedziałem, jestem bewbie, więc dziękuję za ostrzeżenie (o UUCA). lsb_release zrobił kilka komunikatów ostrzegawczych, więc pominąłem to, ale domyślam się, że to rozważę. –

Odpowiedz

7

Jak to:

[[ $supportLeft -lt 1 || $yearCompare -gt 0 ]] 

Można znaleźć te i inne powiązane podmioty w man test

+2

Potrzebujesz spacji między '0' i']] ' –

+0

Ah, tak ... Przeoczyłem to, gdy kopiowałem wklejone Dziękujemy! – janos

+0

:(Ten sam błąd, który miałem z "if (($ supportLeft <1 || $ yearCompare> 0))" ... –

4

To wydaje się działać:

if (($supportLeft < 1)) || (($yearCompare > 0)) 

lub

if (($supportLeft < 1 || $yearCompare > 0)) 
+0

:(Próbowałem, ale skończyło się 3 zawiadomieniami (chyba): nie można otworzyć 1, nie znaleziono pliku, nie znaleziono 993, 72 nie znaleziono; .. Wygląda na to, że jest powiązany z $ yearsCompare => 72, 1 do 1 i 993 do $ supportLeft. Miałam coś takiego Dzisiaj przed ... Jakikolwiek pomysł na ten temat –

3

Nie jestem pewien, czy to jest każda pomoc, ale ta kwestia była wysoko w Google, gdy szukałem „porównać ciąg do int w bash”

można „obsadzie "string do int w bash dodając 0

NUM="99" 
NUM=$(($NUM+0)) 

działa to doskonale, jeśli masz do czynienia z wartości null, jak również

NUM="" 
NUM=$(($NUM+0)) 

Upewnij się, że w ciągu nie ma żadnych spacji!

NUM=`echo $NUM | sed -e 's/ //g'` 

(Testowane na Solaris 10)

Powiązane problemy