2013-11-18 2 views
2

Учитывая сценарий ниже, может кто-то помочь мне пройти мимо этой ошибки? Сценарий вычисляет дни с момента unix и дает дату истечения срока действия пароля, возвращается, рассказывая мне, сколько дней, пока они не будут заблокированы. Его пусть/математика, которая меня достает. Я пробовал кавычки, разные интервалы вокруг оператора «минус» все безрезультатно.bash script error let: -: синтаксическая ошибка: операнд ожидаемый (ошибка token is «-»)

#!/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 
+0

На какой строке стоит эта ошибка? –

ответ

6

Удалить места. Вместо того чтобы сказать:

let LEFT=PWED - $PWTIME 

говорят:

let LEFT=PWED-PWTIME 

Но это ломкими. Если вы не знаете, что делаете, вы должны использовать bash's «Arithmetic Context»:

((LEFT = PWED - $PWTIME)) 
+0

или использовать '((LEFT = PWED - $ PWTIME))', так как он правильно обрабатывает пространства. –

+0

@AaronDigulla Да, арифметический контекст всегда лучше. – devnull

Смежные вопросы