bash 脚本错误让 : -: syntax error: operand expected (error token is "-")

标签 bash shell

鉴于下面的脚本,有人可以帮我解决这个错误吗?该脚本计算自 unix 纪元以来的天数并给出密码到期日期,返回告诉我还有多少天他们将被锁定。它让我得到了让/数学。我试过引号,减号运算符周围的不同间距都无济于事。

#!/usr/bin/bash
#
# Filename: pwx
# Description: Script to tell when A password for a user expires
# Usage: pwx username
#

function daysSince1970 {

    [[ -x /usr/bin/nawk ]] && AWK=/usr/bin/nawk || AWK=/usr/bin/awk
    date +"%j %Y" | $AWK  -v VERBOSE=$1 '
    {
            DAYOFYEAR=$1
            CURRENTYEAR=$2
            DAYS=-1 # Because it is not 1 day since 01/01/1970 until 02/01/1970.
            if (VERBOSE) { printf("%8s%8s%8s\n","Year","Days","Total") }
            for (YEAR=1970; YEAR < CURRENTYEAR; YEAR++) {
                    if (YEAR % 4 == 0) {
                            if (YEAR % 100 == 0) {
                                    if (YEAR % 1000 == 0) {
                                            YEARDAYS=366
                                    } else {
                                            YEARDAYS=365
                                    }
                            } else {
                                    YEARDAYS=366
                            }
                    } else {
                            YEARDAYS=365
                    }
                    DAYS+=YEARDAYS
                    if (VERBOSE) { printf("%8s%8d%8d\n",YEAR,YEARDAYS,DAYS) }
            }
            DAYS+=DAYOFYEAR
            if (VERBOSE) { printf("%8s%8d",YEAR,DAYOFYEAR) }
            printf("%8d\n",DAYS)
    }'
}

case $1 in

    "")
        echo -e "Usage: $0 username"
        ;;

    *)
        SEVENTY=$(daysSince1970)
        PWCD=$(grep $1 /etc/shadow| awk -F":" '{print $3}')
        PWED=$(grep $1 /etc/shadow| awk -F":" '{print $5}')

        let PWTIME=SEVENTY-PWCD

        if [[ $PWTIME -gt $PWED ]]
            then
            echo -e "Password expired"
        else
            let LEFT=PWED - $PWTIME  ####This is the line that is erroring out
            echo -e "$1 password good $LEFT to expire\n"
        fi
        ;;
esac

最佳答案

删除空格。而不是说:

let LEFT=PWED - $PWTIME

说:

let LEFT=PWED-PWTIME

但这很脆弱。除非您知道自己在做什么,否则您应该使用 bash 的“Arithmetic Context”:

((LEFT = PWED - $PWTIME))

关于bash 脚本错误让 : -: syntax error: operand expected (error token is "-"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051146/

相关文章:

Bash 参数扩展定界符

python - Bash 脚本在 python 变量上循环

bash - 如何对名称中包含空格的文件执行 shell "for"命令?

shell脚本无法将命令行的输出保存到变量中

windows - 适用于 Windows 的命令行对话框工具

bash - 如果 Docker 容器正在运行,则停止并删除它

bash - 一段时间后 bash shell 中的退格键行为变为 ^H

shell - 找不到 .sh 文件

linux - AWK- 读取 excel 文件 (CSV) 并制作另一个

shell - KornShell 脚本 - 当子进程中断时父进程未完成 (TRAP INT)