Здравствуйте, в настоящее время работаю над школьным проектом для моего класса Unix.
Создание пользовательского меню для добавления / создания имени пользователя с использованием имени + фамилии для создания имени пользователя (первые инициалы + первые четыре из последних)
Пример. Джон Смит = JSMIT
теперь я могу добавить имена пользователей, но если кто-то должен был ввести такое же или подобное имя пользователя, мне нужно иметь возможность заменить его числом в конце.
Пример. Джеймс Смит = JSMIT1
, пока это то, что у меня есть, я знаю, что мне нужно использовать функцию substr в awk , но я не уверен, как точно.
Я ценю любую помощь, спасибо.
looptest=y
while [ "$looptest" = y ]
do
echo -n "Enter Name: "; read name
echo -n "Enter Last Name "; read last
echo -n "Continue(y)es or (n)o "; read looptest
user="${name:0:1}""${last:0:4}"
echo "$name:$last:$user" >> userData
done
Из вашего кода я вижу, что вы добавляете файл userData
, что означает, что имена файлов будут увеличиваться в числовом суффиксе. Таким образом, чтобы получить следующий доступный суффикс, мы могли бы просмотреть файл userData
с grep
и просто подсчитать количество строк, где встречается имя пользователя:
$ grep -c 'jsmit' users.txt
2
Конечно, если возвращаемое число равно 0, мы можем просто игнорируйте это, потому что это новое имя пользователя. Вот небольшой пример того, как это будет работать:
#!/bin/bash
read -p "Enter first name: " firstname
read -p "Enter lastname: " lastname
username=$(printf "%s%s" "${firstname:0:1}" "${lastname:0:4}")
num=$( grep -c "$username" userData )
if [ "$num" -gt 0 ]; then
username="$username$num"
fi
echo "$username"
Тест с jsmit
и jsmit1
уже в файле:
$ ./indexed_usernames.sh
Enter first name: john
Enter lastname: smith
jsmit2
Однако, обратите внимание, что это очень наивный и упрощенный способ, предполагающий, что никакие имена пользователей не удаляются или отсутствуют индексы и добавляются линейным образом.
Как я понимаю, вы создаете небольшую пользовательскую базу данных в сценарии оболочки. Рассмотрим такой случай: что если бы у нас было jsmit
, jsmit1
и jsmit2
, но тогда мы удалили jsmit1
. Это означает, что скрипт должен учитывать, какие числовые индексы действительно доступны , в противном случае, если мы слепо увеличиваем числа, это может привести к коллизии.
Рассмотрим прописные и строчные имена пользователей. Если я введу John Smith
и john smith
, должно ли это привести к столкновению? Стоит ли сначала преобразовывать все имена пользователей в строчные, а затем обрабатывать коллизии?