У меня есть идея, как проверить наличие id_rsa.pub для каждого пользователя в домашнем каталоге. Но что-то не получается. Мой сценарий:
#!/bin/bash
users=`ls /home/`
for i in "$users"; do
if [[ -f "/home/$i/.ssh/id_rsa.pub" ]]; then
echo "All users have this key"
else
echo "Users $i don't have this key, We need build key for this users"
fi
done
В отладке:
+ [[ -f /home/donovan
valeri
john
roman
colbi
testuser/.ssh/id_rsa.pub ]]
Насколько я понимаю, для каждого пользователя требуется полный путь, но не полный путь. Пожалуйста, помогите, что я делаю не так? Спасибо за внимание. И, конечно, результат:
Users donovan
valeri
john
roman
colbi
testuser don't have this key, We need build key for this users
В ls /home
не рекомендуется использовать в скриптах. ls
является удобочитаемой командой листинга и не предназначена для использования в скриптах.
Вы можете просто создать массив и перебрать индексы, например
#!/usr/bin/env bash
users=(/home/*)
for i in "${users[@]}"; do
if [[ -f "$i/.ssh/id_rsa.pub" ]]; then
echo "All users have this key"
else
echo "Users $i don't have this key, We need build key for this users"
fi
done
В кавычках все имена пользователей отображаются как одна строка:
for i in "$users"; do
Удалите кавычки, и все работает:
for i in $users; do
Имена пользователей не содержат пробелов, так что здесь вы должны быть в безопасности.