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
Comme ça:
[[ $supportLeft -lt 1 || $yearCompare -gt 0 ]]
Vous pouvez trouver ces opérateurs et d'autres opérateurs associés dans man test
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)
Cela semble fonctionner:
if (( $supportLeft < 1 )) || (( $yearCompare > 0 ))
ou
if (( $supportLeft < 1 || $yearCompare > 0 ))