Пользователи, которые входили в систему более 2 раз - сценарий bash

Я пытаюсь написать сценарий, который будет проверять, регистрируются ли пользователи (в качестве аргументов) более одного раза одновременно. Пока у меня есть сценарий, который проверяет первый аргумент, и он отлично работает. Но как это сделать, чтобы проверить других пользователей в качестве аргументов? Вот код:

for users in $(w -h)
do    
if [ "$users" = "$1" ]
then echo "User $1 is logged in"
counter=$((counter+1))
fi
done    
if [ "$counter" > 1 ]
then echo "User $1 is logged $counter times"
else
echo "User $1 is logged less than two times"
fi

bash usersscript.sh user1 user2 user3 etc ... Спасибо за вашу помощь

4
задан 25 November 2020 в 22:32

1 ответ

Чтобы изменить текущий подход, вам потребуется массив счетчиков для разных пользователей и дополнительный цикл для проверки каждого значения $users относительно каждого позиционного параметра $1, $2, ... .

Обратите внимание, что для пользователей в $(w -h) перебирает все маркеры, разделенные пробелами, в выводе w -h, а не только имена пользователей - это может " work» (поскольку маловероятно, что другие токены соответствуют допустимому имени пользователя), но это не «правильно» — вы можете использовать $(w -h | cut -d ' ' -f1) для извлечения только имен пользователей.

Для более простого подхода вы можете запустить w -h для каждого имени пользователя, указанного в командной строке, и подсчитать количество строк вывода, например, используя wc -l

#!/bin/sh

for user do

  counter=$(w -h "$user" | wc -l)

  if [ "$counter" -gt 2 ]; then
    printf "user %s is logged in %d times\n" "$user" "$counter"
  else
    printf "user %s is logged in less than two times\n" "$user"
  fi

done

Обратите внимание, что bash для этого не требуется — вы можете использовать более легкую оболочку /bin/sh (хотя тот же код будет работать в bash).

5
ответ дан 25 November 2020 в 14:07

Другие вопросы по тегам:

Похожие вопросы: