我正在尝试测试是否支持Ubuntu版本,如果不支持,那么我在APT文件夹中更新source.list
我知道我无法在<>
中使用[[ ]]
,所以我尝试[( )]
,尝试了[]
,甚至尝试使用正则表达式并且“ - “在变量中,但它不起作用,因为它找不到”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
答案 0 :(得分:8)
像这样:
[[ $supportLeft -lt 1 || $yearCompare -gt 0 ]]
您可以在man test
答案 1 :(得分:5)
不确定这是否有任何帮助,但当我搜索“在bash中比较字符串到int”时,谷歌的这个问题很高
您可以通过添加0
将字符串“强制转换”为bash中的intNUM="99"
NUM=$(($NUM+0))
如果您还必须处理NULL,这非常有用
NUM=""
NUM=$(($NUM+0))
确保字符串中没有空格!
NUM=`echo $NUM | sed -e 's/ //g'`
(在Solaris 10上测试)
答案 2 :(得分:4)
这似乎有效:
if (( $supportLeft < 1 )) || (( $yearCompare > 0 ))
或
if (( $supportLeft < 1 || $yearCompare > 0 ))
答案 3 :(得分:0)
BaSH条件是-当涉及到数字和算术时-非常令人困惑。
这两种方法都可以使用:
if [ $((supportLeft)) -lt 1 ] || [ $((yearCompare)) -gt 0 ]
或
if (( supportLeft < 1 || yearCompare > 0 ))
请注意,两种方法都将空值视为零。如果您等式两边的变量的值为空,则它们将不会生成错误消息,这取决于您的脚本和环境,这可能是有利的。