16

我正在尝试测试是否支持 Ubuntu 版本,如果不支持,则更新 APT 文件夹中的 source.list

我知道我不能在 inside 中使用<>[[ ]]所以我尝试了[( )],尝试[]了,甚至尝试使用 regexp is there 和变量中的“-”,但它不起作用,因为它找不到“file: 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
4

4 回答 4

15

像这样:

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

您可以在以下位置找到这些和其他相关运算符man test

于 2013-04-28T15:50:44.560 回答
8

不确定这是否有帮助,但是当我搜索“将字符串与 bash 中的 int 进行比较”时,Google 中的这个问题很高

您可以通过添加 0 将字符串“转换”为 bash 中的 int

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

如果您还必须处理 NULL,这非常有用

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

确保字符串中没有空格!

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

(在 Solaris 10 上测试)

于 2013-06-13T17:30:38.800 回答
4

这似乎有效:

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

或者

if (( $supportLeft < 1 || $yearCompare > 0 ))
于 2013-04-28T15:48:42.680 回答
1

BaSH 条件句 - 当涉及到数字和算术时 - 非常令人困惑。

这些方法中的任何一种都可以:

if [ $((supportLeft)) -lt 1 ] || [ $((yearCompare)) -gt 0 ]

或者

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

请注意,这两种方法都将空值视为零。根据您的脚本和环境,这可能是有利的,因为如果等式两边的变量值为空,它们不会生成错误消息。

于 2020-10-13T22:45:27.897 回答