Я пытаюсь написать сценарий, который будет проверять, регистрируются ли пользователи (в качестве аргументов) более одного раза одновременно. Пока у меня есть сценарий, который проверяет первый аргумент, и он отлично работает. Но как это сделать, чтобы проверить других пользователей в качестве аргументов? Вот код:
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 ... Спасибо за вашу помощь
Чтобы изменить текущий подход, вам потребуется массив счетчиков для разных пользователей и дополнительный цикл для проверки каждого значения $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).