web-dev-qa-db-fra.com

Bash: comparaison d'une chaîne en tant qu'entier

J'essaie de tester si la version d'Ubuntu est prise en charge ou non, et si ce n'est pas le cas, je mets à jour source.list dans APT dossier

Je sais que je ne peux pas utiliser <> Dans [[ ]], Alors j'ai essayé [( )], essayé [], Et même essayé d'utiliser une expression rationnelle est là et "-" dans la variable, mais cela n'a pas fonctionné, car il n'a pas pu trouver "fichier: 76".

Comment dois-je écrire la comparaison pour qu'elle fonctionne?

Mon code:

#!/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
12
Universal Coder

Comme ça:

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

Vous pouvez trouver ces opérateurs et d'autres opérateurs associés dans man test

9
janos

Je ne sais pas si cela peut vous aider, mais cette question était élevée dans Google lorsque j'ai recherché "comparer la chaîne à int en bash"

Vous pouvez "transtyper" une chaîne en un entier dans bash en ajoutant 0

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

Cela fonctionne très bien si vous devez également gérer des NULL

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

Assurez-vous qu'il n'y a pas d'espaces dans la chaîne!

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

(Testé sur Solaris 10)

5
mmrtnt

Cela semble fonctionner:

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

ou

if (( $supportLeft < 1 || $yearCompare > 0 ))
4
Lev Levitsky