2013-04-28 2 views
7

Я пытаюсь проверить, если это версия Ubuntu поддерживается или нет, и в случае, если это не так, то я обновлю source.list в APT папкеBash: сравнивая строку в целое число

Я знаю что я не могу использовать <> в пределах [[ ]], поэтому я попробовал [()], попробовал [] и даже попытался использовать regexp, и «-» в переменной, но это не сработало, потому что он не смог найти «файл: 76», ,

Как написать сравнение для работы?

Мой код:

#!/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

как в сторону, чтобы избежать [UUCA] (http://partmaps.org/era/unix/award.html) там, попробовать 'выходной = $ (grep -o "[0-9]"/etc/issue) '(да, здесь' tr' также совершенно лишний). Вероятно, вы, вероятно, будете «grep» более чем на одну цифру, я думаю? – tripleee

+1

На самом деле получение машиносчитываемой версии из ['lsb_release'] (http://linux.die.net/man/1/lsb_release) намного проще и надежнее, чем попытка проанализировать'/etc/issue'. – tripleee

+0

@ tripleee возможно, как я уже сказал, я бездельник, так что спасибо за предупреждение (о UUCA). lsb_release сделал несколько предупреждающих сообщений, поэтому я пропустил их, но думаю, что передумаю. –

ответ

7

Как это:

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

Вы можете найти эти и другие связанные оператор в man test

+2

Вам нужно пространство между '0' и']] ' –

+0

А, да ... Я упустил из виду, что при копировании Спасибо! – janos

+0

:(То же самое, что у меня было с "if (($ supportLeft <1 || $ yearCompare> 0))" ... –

4

Это похоже на работу:

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

или

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

:(Пробовал, но он оканчивается 3 уведомлениями (я думаю): не могу открыть 1, файл не найден, 993 не найден, 72 не найдено; .. Похоже, он связан с $ yearsCompare => 72, 1 к 1 и от 993 до $ supportLeft. Было что-то вроде этого Сегодня раньше ... Любая идея об этом? –

3

Не уверены, если это любая помощь, но этот вопрос был высоко в Google, когда я искал «сравнивать строки в целое в Баше»

Вы можете «гипс "строка с междунар в Баш, добавив 0

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

Это отлично работает, если вы имеете дело с, а значения NULL

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

Убедитесь, что в строке нет пробелов!

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

(Проверено на Solaris 10)

Смежные вопросы