您好我正在尝试从文本文件中创建多个用户
下面:
tony romo
drew brees
laura smith
bob jones
joe hones
kelly clarkson
hank hill
michael scott
并且为此我使用脚本
while read first last; do
name="$first $last"
username="$last${first:0:1}"
n=‘egrep –c $username /etc/passwd‘
n=$((n + 1))
username=$username$n
password=‘tr –cd '[:alpha:]' < /dev/urandom | head –c8‘
echo $password | passwd --stdin $username
echo “$username $password” >> /root/tempPasswords
useradd –c “$name” –m $username
done
然后我执行命令
./name_of_script accounts.txt
然而没有任何反应,任何想法为什么?谢谢你的帮助!
修改
我做了以下更改,现在我得到了useradd命令错误,任何想法为什么? 我做了更改,但现在有任何原因导致useradd命令出错?
#!/bin/bash
while read first last; do
name="$first $last"
username="$last${first:0:1}"
n=`egrep –c $username /etc/passwd`
n=$((n + 1))
username=$username$n
password=`tr –cd `[:alpha:]` < /dev/urandom | head –c8`
echo $password | passwd --stdin $username
echo “$username $password” >> /root/tempPasswords
useradd –c "$name" –m $username
done < "$1"
答案 0 :(得分:1)
您编写的脚本从stdin读取。什么都没发生,因为它等着你输入名字。您可以使用重定向运行脚本:
./name_of_script < accounts.txt
或者更改脚本以在其命令行$1
上从文件中读取。为此,请将重定向添加到循环中,如下所示:
while read first last; do
...
done < "$1"
你也想摆脱聪明的报价。 ‘
应为`
(反引号),“...”
应为"..."
(纯双引号)。避免在像MS Word这样的奇特文字处理器中编辑代码。您希望坚持使用像Vim或Notepad ++这样的纯文本编辑器,这些编辑器旨在编辑代码而不是文档。
答案 1 :(得分:1)
你的报价被软管了。如果你有一个卷曲的引用,你应该有一个反引号(ASCII 96),然而在这个千禧年,用现代语法$(command)
更好地写。
完成此操作后,只需在< "$1"
之后添加done
即可读取第一个参数作为while read
循环的输入。