2017-02-06 3 views
1

Я пытаюсь написать сценарий bash, который выполняется через «./filename username» и проверяет, зарегистрирован ли этот пользователь, распечатывает результат. Я все еще новичок в написании сценариев, и мне трудно понять, как это сделать.Сценарий Beginner's Bash: ошибка «Unary Operator Expected» && как использовать grep для поиска переменной из вывода команды?

В настоящее время я получаю сообщение об ошибке «строка 7: [: ambonill: ожидается унарный оператор». Что это значит и как я могу исправить эту ошибку?

Кроме того, как бы я получил grep для работы вместо сортировки | уник? Я хотел бы grep для переменной из вывода команды, но не могу найти ничего связанного на странице руководства.

#! /bin/bash 
# This script will take a username as an argument and determine whether they are logged on. 

function loggedin { 
    for u in `who | cut -f1 -d" " | sort | uniq` 
    do 
    if [ $u == $1 ] 
    then 
     echo "$1 is logged on" 
    else 
     echo "$1 is not logged on" 
    fi 
    exit 0 
    done 
} 

loggedin $u 
exit 1 
+1

Вы называете 'loggedin' с' $ u', но '$ u' не установлен в любом месте. –

+2

Проверьте свой код с помощью shellcheck.net. – chepner

+0

Для 'grep': Я думаю, что вы ищете' grep -o', но 'sort | uniq' (или 'sort -u') отличается. –

ответ

0

Попробуйте найти более простое решение, как:

#!/bin/bash 
echo "$1 is $([ -z "$(w -h $1)" ]&&echo -n not\)logged on" 
Смежные вопросы