s235784 / NJUPT_AutoLogin

南京邮电大学校园网自动登录脚本,支持Linux(OpenWRT)、Macos、RouterOS平台,内附单线多拨教程
https://nuotian.furry.pro/blog/archives/347
Apache License 2.0
34 stars 2 forks source link

连接时脚本提示arithmetic syntax error #10

Closed KansChen closed 1 week ago

KansChen commented 1 month ago

连接时脚本提示arithmetic syntax error 检查得到是

check_time() {
    local week
    week=$(date +%w)

    local time
    time=$(date +%H%M)

    # Monday to Thursday
    if [[ "$week" -ge 1 ]] && [[ "$week" -le 4 ]]; then
        # 7:01 to 23:00
        if [[ "$((10#$time))" -ge 701 ]] && [[ "$((10#$time))" -le 2300 ]]; then
            return 0
        fi
        # Friday
    elif [[ "$week" -eq 5 ]]; then
        # After 7:01
        if [[ "$((10#$time))" -ge 701 ]]; then
            return 0
        fi
        # Saturday
    elif [[ "$week" -eq 6 ]]; then
        return 0
        # Sunday
    elif [[ "$week" -eq 0 ]]; then
        # Before 23:00
        if [[ "$((10#$time))" -le 2300 ]]; then
            return 0
        fi
    fi

    return 1
}

的问题,使用电信校园网,有限制时间,运行在openwrt。

运行时间是周五晚上23:15,24/9/27。

“arithmetic syntax error”可能是由于在OpenWrt的默认Shell环境中,不支持$((10#$time))这种语法导致的。

在Bash中,$((10#$time))用于将变量$time解释为十进制数,避免因前导零导致的八进制解析问题。然而,OpenWrt通常使用ash(Almquist shell)或BusyBox的内置Shell,这些Shell的算术扩展不支持base#number的语法。

问题原因:

解决方案:

以下是修改后的脚本:

check_time() {
    local week
    week=$(date +%w)

    local time
    time=$(date +%H%M)
    time=${time#0}  # 移除前导零

    # Monday to Thursday
    if [[ "$week" -ge 1 ]] && [[ "$week" -le 4 ]]; then
        # 7:01 to 23:00
        if [[ "$time" -ge 701 ]] && [[ "$time" -le 2300 ]]; then
            return 0
        fi
    # Friday
    elif [[ "$week" -eq 5 ]]; then
        # After 7:01
        if [[ "$time" -ge 701 ]]; then
            return 0
        fi
    # Saturday
    elif [[ "$week" -eq 6 ]]; then
        return 0
    # Sunday
    elif [[ "$week" -eq 0 ]]; then
        # Before 23:00
        if [[ "$time" -le 2300 ]]; then
            return 0
        fi
    fi

    return 1
}
KansChen commented 1 month ago

补充本地环境信息。 设备是红米AX6S路由器,刷入了OpenWrt R22.4.1-PokerS v3 / LuCI Master (git-22.103.65959-d9db1b0)。 内核版本:5.10.110

~# cat /proc/version
Linux version 5.10.110 (pokers@PokerS-PC) (aarch64-openwrt-linux-musl-gcc (OpenWrt GCC 8.4.0 r4457-b6dfa17e4) 8.4.0, GNU ld (GNU Binutils) 2.34) #0 SMP Sun Apr 17 02:11:20 2022
s235784 commented 4 weeks ago

已在最新的commit中尝试修复该Bug,麻烦测试并反馈结果。

KansChen commented 1 week ago

测试两个星期暂时未发现bug