Linux 使用文本文件作为输入?我做错了什么?
你好,我正在尝试从一个文本文件创建多个用户 在这里: 为此,我使用了脚本Linux 使用文本文件作为输入?我做错了什么?,linux,shell,unix,scripting,Linux,Shell,Unix,Scripting,你好,我正在尝试从一个文本文件创建多个用户 在这里: 为此,我使用了脚本 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 '[:a
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
但什么都没发生,你知道为什么吗?谢谢你的帮助
编辑
我做了以下更改,现在我得到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"
#/bin/bash
先读后读;做
name=“$first$last”
username=“$last${first:0:1}”
n=`egrep–c$username/etc/passwd`
n=$((n+1))
用户名=$username$n
密码=`tr–cd`[:alpha::`>/root/tempPasswords
useradd–c“$name”–m$username
完成<“$1”
您编写的脚本从stdin读取。什么都没发生,因为它在等你把名字打出来。您可以通过重定向运行脚本:
./name_of_script < accounts.txt
您还需要删除智能引号<代码>“应该是
”
(反勾)而“…”
应该是“…”
(纯双引号)。避免在像MS word这样的花哨文字处理器中编辑代码。你会希望坚持使用纯文本编辑器,如Vim或Notepad++,这些编辑器设计用于编辑代码而不是文档。你的引用被套住了。如果你有一个卷曲的引号,你应该有一个反勾号(ascii96),但是在这个千年中,用现代语法$(command)
编写它更好
这样,只需在完成后添加<“$1”
,即可在读取循环时读取第一个参数作为的输入
#!/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"
./name_of_script < accounts.txt
while read first last; do
...
done < "$1"