bash脚本错误let:-:语法错误:应为操作数(错误标记为“-”)

bash脚本错误let:-:语法错误:应为操作数(错误标记为“-”),bash,shell,Bash,Shell,根据下面的脚本,有人能帮我克服这个错误吗?该脚本计算自unix时代以来的天数,并给出密码过期日期,然后返回,告诉我它们将被锁定多少天。让我着迷的是数学。我试过引号,减号运算符周围的不同间距都没有用 #!/usr/bin/bash # # Filename: pwx # Description: Script to tell when A password for a user expires # Usage: pwx username # function daysSince1970 {

根据下面的脚本,有人能帮我克服这个错误吗?该脚本计算自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
#/usr/bin/bash
#
#文件名:pwx
#描述:用于告诉用户密码何时过期的脚本
#用法:pwx用户名
#
功能日期1970{
[[-x/usr/bin/nawk]]和&AWK=/usr/bin/nawk | | AWK=/usr/bin/AWK
日期+%j%Y“|$AWK-v详细=$1”
{
DAYOFYEAR=$1
本年度=2美元
天数=-1#因为从1970年1月1日到1970年1月2日不是一天。
如果(详细){printf(“%8s%8s%8s\n”,“年”,“天”,“总数”)}
对于(年份=1970;年份<当前年份;年份++){
如果(第%4年==0){
如果(年份%100==0){
如果(年份%1000==0){
年天数=366
}否则{
年日=365
}
}否则{
年天数=366
}
}否则{
年日=365
}
天数+=年天数
if(详细){printf(“%8s%8d%8d\n”,年,年,天)}
}
天数+=一年中的某一天
if(VERBOSE){printf(“%8s%8d”,YEAR,DAYOFYEAR)}
printf(“%8d\n”,天)
}'
}
每箱1元
"")
echo-e“用法:$0用户名”
;;
*)
七十=$(1970年起计日)
PWCD=$(grep$1/etc/shadow | awk-F):“{print$3}”)
PWED=$(grep$1/etc/shadow | awk-F):“{print$5}”)
设PWTIME=70-PWCD
如果[[$PWTIME-gt$PWED]]
然后
echo-e“密码已过期”
其他的
LEFT=PWED-$PWTIME######这是出错的线路
echo-e“$1密码有效$剩余到期时间\n”
fi
;;
以撒

删除空格。而不是说:

let LEFT=PWED - $PWTIME
说:

但这是易碎的。除非你知道自己在做什么,否则你应该使用bash的“”:


这个错误在哪一行?或者使用
((LEFT=PWED-$PWTIME))
,因为它可以正确处理空格。@Aarondigula是的,算术上下文总是更好。
let LEFT=PWED-PWTIME
((LEFT = PWED - $PWTIME))