Linux 是否将.txt文件中的内容作为bash脚本的参数传递?

Linux 是否将.txt文件中的内容作为bash脚本的参数传递?,linux,bash,Linux,Bash,我需要“编写一个脚本,将用户添加到您的系统中,在该系统中,用户的名称作为参数n(in?,教授拼写错误)提供给脚本,格式为 Last_Name First_Name Middle_Initial Group (其余说明仅供参考)脚本应创建最多8个字符的唯一用户名,并生成 用户的随机密码。应为用户分配主目录 根据用户所在的组,您可以假定用户将属于 管理层(“管理”)、员工(“雇员”)或临时(“临时”)及其 各自的目录位于/home中的这些组名下。例如,如果John Doe是 在“mgmt.”

我需要“编写一个脚本,将用户添加到您的系统中,在该系统中,用户的名称作为参数n(in?,教授拼写错误)提供给脚本,格式为

Last_Name  First_Name  Middle_Initial  Group
(其余说明仅供参考)脚本应创建最多8个字符的唯一用户名,并生成 用户的随机密码。应为用户分配主目录 根据用户所在的组,您可以假定用户将属于 管理层(“管理”)、员工(“雇员”)或临时(“临时”)及其 各自的目录位于/home中的这些组名下。例如,如果John Doe是 在“mgmt.”中,他的用户名是jdoe1234,那么他的主目录应该在 /home/mgmt/jdoe1234。锁定主目录,这样其他人就没有了 对主目录的权限大于用户本身的权限。 脚本应生成一个名为users.txt的文件,其中包含以下列:

姓氏名字UID密码

可用于向用户分发用户名和密码

第一部分(不是斜体)让我感到困惑。如果我正确理解他的措辞,他希望我从一个单独的
.txt
文件中提取文本,并将其用作我脚本的参数??的想法是

./file.sh arg1 arg2 arg3 arg4
除了那些参数是.txt文件中的前四个单词之外?比如说,如果.txt文件包含“Doe John A emp”,那么这就像键入

./file.sh arg1 arg2 arg3 arg4
以下是我迄今为止的尝试(我确实尝试过其他东西,但这是我现在在屏幕上看到的,有点像我一开始就做的):

到目前为止,第一行以下的任何内容都不起任何作用。我从中获得第一行并使用它,因为我认为它可以让我使用.txt文件中的内容作为参数,但它显然没有这样做。它只是输出它的内容,而不是让我使用每个单词作为参数。不确定该做什么。有什么帮助吗?我认为这不会很困难,因为我开始编写脚本时假设用户会提供参数,但我重新阅读了说明的第一部分,并假设他希望从一个单独的.txt文件中获取这些参数。

$(command)
返回命令的输出。如果您这样做,则返回
$(cat some\u文件)
它将返回文件的文本。您可以使用它作为参数提供文件的内容,执行以下操作:

cmd1 $(cat args_file)
因此,当您使用
echo$(cat file.txt)
时,您将获得与使用
cat file.txt
相同的输出,因为
cat
将文件内容发送到
echo
,后者将其显示为标准输出

$n
表示传递给脚本的参数
n
$0
是脚本的名称)。这里您只需提供一个参数,即文件名。因此
$2、
$3
$4
将不包含任何内容

因此,您只能从文件中获取名称为
$names=$(cat$1)
的字符串。为了单独获取每个字段,您可以使用
cut

lname=$(cut -d \  -f 1 $1)
fname=$(cut -d \  -f 2 $1)
mname=$(cut -d \  -f 3 $1)
group=$(cut -d \  -f 4 $1)
注意事项:

shell中注释的符号是
#
而不是
/


head
显示文件的第一行,
head-c
显示文件的第一个字节。它不会剪切文件。

我所理解的问题是:

首先:要将文本文件的内容作为输入/参数传递给
shell脚本

可能还有其他方法,但我建议如下:

./YourScriptFile.sh $(cat YourInputFile.txt)
FirstTwoChars_of_FirstToken=${1:0:2}
FirstTwoChars_of_SeventhToken=${7:0:2}
其次:您想使用它的内容

我建议在脚本文件中使用以下内容:

$1, $3, $4, ..., $n
要访问:

1st, 2nd, 3rd, ..., nth
输入文件中的标记(不考虑新行)

最后:您想让用户名使用姓氏的前3个字母,或者换句话说,您想使用

一旦你有了代币,就很简单了。我建议如下:

./YourScriptFile.sh $(cat YourInputFile.txt)
FirstTwoChars_of_FirstToken=${1:0:2}
FirstTwoChars_of_SeventhToken=${7:0:2}

希望这能帮助您改进代码

作为脚注:您的代码将变成:(
#
用于此处的注释)


现在,您必须执行上面提到的shell脚本。

/
不是shell中的注释谢谢您的帮助。我使用了一种形式的“剪切”,它似乎可以工作。
#!/bin/bash
lname=$(1:0:3) #to make username use first 3 letters of last name
fname=$(2:0:1) #to make username use first letter of first name
mname=$3
group=$4
echo "$lname$fname$mname$group"