Linux 我想在从文件创建的每个用户名的末尾添加2个随机数。在bash中我将如何做到这一点?

Linux 我想在从文件创建的每个用户名的末尾添加2个随机数。在bash中我将如何做到这一点?,linux,bash,scripting,Linux,Bash,Scripting,使用userlist.txt 詹姆斯·邦德 本·阿弗莱克 约翰·斯图尔特 阿卜杜勒·拉希姆·穆罕默德 电流输出 !#/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

使用userlist.txt 詹姆斯·邦德 本·阿弗莱克 约翰·斯图尔特 阿卜杜勒·拉希姆·穆罕默德

电流输出

!#/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
期望输出

james.bond
ben.afflack
john.stewart
abdul.rahim.muhammad
将数字添加到末尾最简单的方法是什么?我正在考虑做一些类似于$((随机%10)).$((随机%10))的事情


非常感谢您的帮助。谢谢

您使用$RANDOM的方法是正确的,但是它比您想象的要简单。我可以通过以下方式实现:

user=james.bond
兰德=${RANDOM:0:2}
如果[${rand}-lt 2]
然后
兰特=0美元兰特
fi
user=$user$rand

这将用户设置为
james.bond23
(或其他一些2位数字)。您只需使用参数展开来选择$RANDOM生成的前两个数字。

使用$RANDOM是正确的,但是它比您想象的要容易。我可以通过以下方式实现:

user=james.bond
兰德=${RANDOM:0:2}
如果[${rand}-lt 2]
然后
兰特=0美元兰特
fi
user=$user$rand

这将用户设置为
james.bond23
(或其他一些2位数字)。您只需使用参数展开来选择$RANDOM生成的前两个数字。

关于如何在循环中实现这一点,我添加了一个小片段,而不使用
cut


假设您有包含以下内容的文件
userlist.txt

james.bond22
ben.afflack13
john.stewart11
abdul.rahim.muhammad83
在此文件中,每个名称由一个新行分隔(
\n

读数可通过单个while循环完成。通过以下快速方法,您可以打印所需的输出:

#/bin/bash
echo“您希望添加哪些姓名?”
#阅读你的文件
读取文件
echo“正在读取$file”
#通过文本文件的每一行进行迭代。
读p;做
#使用$p:e访问每个元素。G回声$p
#在$p上应用字符串操作,添加
#最后随机数并打印出来
echo${p//.}.${RANDOM:0:2}
完成<$file#文本文件的文件名

${p//.}
部分称为bash字符串操作。如果你对此感兴趣,你可以看看。但是POSIX没有指定它。并非所有Unix shell都实现了它。

关于如何在循环中实现这一点,我添加了一个小片段,没有使用
cut


假设您有包含以下内容的文件
userlist.txt

james.bond22
ben.afflack13
john.stewart11
abdul.rahim.muhammad83
在此文件中,每个名称由一个新行分隔(
\n

读数可通过单个while循环完成。通过以下快速方法,您可以打印所需的输出:

#/bin/bash
echo“您希望添加哪些姓名?”
#阅读你的文件
读取文件
echo“正在读取$file”
#通过文本文件的每一行进行迭代。
读p;做
#使用$p:e访问每个元素。G回声$p
#在$p上应用字符串操作,添加
#最后随机数并打印出来
echo${p//.}.${RANDOM:0:2}
完成<$file#文本文件的文件名

${p//.}
部分称为bash字符串操作。如果你对此感兴趣,你可以看看。但是POSIX没有指定它。并非所有Unix shell都能实现它。

Bash允许将格式化字符串直接打印到变量。因此:
printf-v用户'%s%02d'$user”“$(随机%100))“
Bash允许将格式化字符串直接打印到变量。所以:
printf-v用户“%s%02d”“$user”“$(随机%100))”
它在我的脚本中是如何工作的?james.bond不会出现在脚本中,因为我正在读取文件并将其应用于该文本文件中的每个人。是的,这只是一个单一的示例,你可以在读取用户时将除第一行之外的所有内容放在
之后;执行
。这将在您调用echo时打印出“新”用户。但在我的脚本中它看起来如何工作?james.bond不会出现在脚本中,因为我正在读取文件并将其应用于该文本文件中的每个人。是的,这只是一个单一的示例,你可以在读取用户时将除第一行之外的所有内容放在
之后;执行
。这将在您调用echo时打印出“新”用户。