У меня есть рабочий скрипт для времени входа в систему, но если пользователь не вошел в систему, я получаю сообщение об ошибке - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть рабочий скрипт, который сообщает, как долго пользователь вошел в систему. Но если пользователь не вошел в систему, он скажет, что вышел из системы, но это даст мне ошибку для одного из тестов в середине скрипта.

Я пытаюсь выяснить, как пропустить эти строки, если пользователь не в сети

if [ $eMin -lt 0 ]
     then
     eMin=$(expr $eMin + 60 )
    eHr=$(expr $eHr - 1 )
    fi

Это полный скрипт для контекста

while [ -z "$1" ]
do
echo -n "Please enter valid id: "
read var1
set $var1 $1
# Break the loop
if [ -n "$1" ]
then
break
fi
done

# Check if the user is a valid user
if id "$1" >/dev/null 2>1;
# If so, then check if he if he is currently logged on and set on/not on as variable
then
# Set full name variable based on matching ID
fullname=$(grep "$1" /etc/passwd | cut -d ':' -f5 | sort -k 2 | tr ",,:" " " | awk '{print $2,$1}')
# Get Current  Hours and Minutes
nowHr=$(date | cut -c 12,13)
nowMin=$(date | cut -c 15,16)
onHr=$(who |grep "$1" | cut -c 34,35)
onMin=$(who |grep "$1" |cut -c 37,38)
# Hours minutes spent logged on
eHr=$(expr $nowHr - $onHr )
eMin=$(expr $nowMin - $onMin )

if [ $eMin -lt 0 ]
then
eMin=$(expr $eMin + 60 )
eHr=$(expr $eHr - 1 )
fi

# Test and display user name and if curretnly logged on
# Exit with code of 0 if success and 1 if fail
who -u |grep -q "$1" || test && echo "$fullname is logged on for $eHr hour(s) and $eMin minutes(s)." &&  exit 0 || echo "$fullname is not logged on" && exit 1
# Displays if invalid id is entered
else
echo "The user you entered, $1 is not a valid user on this system"
# Exit with code of 2
fi
exit 2

Сообщение об ошибке

expr: syntax error
expr: syntax error
/timeOn: line 38: [: -lt: unary operator expected
John Doe is not logged on

1 Ответ

0 голосов
/ 19 апреля 2019

Если пользователь не вошел в систему, вы не сможете получить вывод для "who | grep $ 1 | cut -c 37,38".Следовательно, вы не можете сравнить пустую строку с целым числом.

Вот почему вы получили синтаксическую ошибку.

Вообще говоря, для отладки стоит использовать "bash -x script".

В этом сценарии вы можете определить, вошел ли пользователь на первом этапе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...