Я хотел бы добавить 2 случайных числа в конце каждого имени пользователя, созданного из файла. Как бы я сделал это в Bash? - PullRequest
0 голосов
/ 01 октября 2019
!#/bin/bash
 echo "which list of names would you like to add?"
 read file
 USER_LIST="(cut -d " " -f 1,2,3 $file --output-delimeter='.') " 
 echo "$USER_LIST | while read user; do echo "useradd "$user"";
 done

с помощью userlist.txt Джеймс Бонд Бен Аффлак Джон Стюарт Абдул Рахим Мухаммад

ТЕКУЩИЙ ВЫХОД

james.bond
ben.afflack
john.stewart
abdul.rahim.muhammad

желаемый вывод

james.bond22
ben.afflack13
john.stewart11
abdul.rahim.muhammad83

Что будетсамый простой способ добавить цифры в конец? Я пытался сделать что-то вроде. $ ((RANDOM% 10)). $ ((RANDOM% 10))

любая помощь очень ценится. Спасибо

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

С помощью $ RANDOM вы на правильном пути, однако это проще, чем вы думаете. Я смог сделать это со следующим:

user=james.bond
rand=${RANDOM:0:2}
if [ ${#rand} -lt 2 ]
then 
  rand=0$rand
fi
user=$user$rand

Это устанавливает для пользователя значение james.bond23 (или другое 2-значное число). Вы просто используете расширение параметра, чтобы выбрать первые два числа, сгенерированные $ RANDOM.

0 голосов
/ 02 октября 2019

Обращаясь к вашему вопросу о том, как реализовать это в цикле, я добавил небольшой фрагмент без использования cut.


Предполагая, что у вас есть файл userlist.txt со следующим содержанием

james bond 
ben afflack 
john stewart 
abdul rahim muhammad

В этом файле каждое имя отделяется новой строкой (\n).

Чтение можно выполнить с помощью одного цикла while. При следующем быстром подходе вы можете напечатать желаемый результат:

#!/bin/bash

echo "which list of names would you like to add?"
# Read your file
read file
echo "Reading $file."

# Iterating trough each line of your text file. 
while read p; do
  # Accessing each element with $p: e. g. echo $p

  # Apply a string manipulation on $p, add a 
  # random number at the end and print it out
  echo ${p// /.}.${RANDOM:0:2}

done < $file # Your filename of your text file

Часть ${p// /.} называется манипулированием строк bash. Если вы заинтересованы в этом, вы можете взглянуть на Shell-Parameter-Expansion . Но это не указано в POSIX. Не все оболочки Unix реализуют это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...