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"