Назад | Перейти на главную страницу

Наличие файла для каждой пользовательской директории на bash

У меня есть идея, как проверить наличие 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

Имена пользователей не содержат пробелов, так что здесь вы должны быть в безопасности.