将.text文件中的内容作为bash脚本的参数传递?

时间:2015-03-09 07:44:36

标签: linux bash

我需要“编写脚本以将用户添加到您的系统中,其中用户的名称被赋予脚本作为参数n(在?中,教授的拼写错误)格式为

的文本文件
Last_Name  First_Name  Middle_Initial  Group

(其余说明FYI)您的脚本应创建最多8个字符的唯一用户名,并生成 用户的随机密码。应为用户分配主目录 取决于他们所在的组。您可以假设用户将属于 管理(“mgmt”),员工(“empl”)或临时(“temp”)和他们的 各个目录在/ home中的这些组名下。例如,如果John Doe是 在“mgmt。”中,他的用户名是jdoe1234,那么他的主目录应该在 /家/管理/ jdoe1234。锁定主目录,使其他人没有 主目录的权限比用户自己的权限。 您的脚本应生成一个名为users.txt的文件,其中包含以下列:

姓氏名字UID密码

可用于将用户名和密码分发给用户。

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

的想法
./file.sh arg1 arg2 arg3 arg4

除了那些args将成为.txt文件中的前四个单词之外?比方说,如果.txt文件包含“Doe John A empl”,那就像输入

一样
./file.sh arg1 arg2 arg3 arg4

这是我到目前为止的尝试(我实际上尝试了其他的东西,但这就是我现在在屏幕上看到的,而不是我刚开始的那种):

#!/bin/bash
echo "$(cat file.txt)"
lname=$(echo $1|head -c 3)//to make username use first 3 letters of last name
fname=$(echo $2|head -c 1)//to make username use first letter of first name
mname=$3
group=$4
echo "$lname$fname$mname$group"

截至目前,第一行以下的任何内容都没有做任何事情。我从command line arguments from a file content获得了第一行并且我使用它因为我认为它会让我使用.txt文件中的内容作为参数,但显然没有这样做。它只是输出它的内容,而不是让我使用每个单词作为参数。不知道该怎么办。有帮助吗?我认为这不会非常困难,因为我开始编写脚本,假设用户提供参数,但我重读了说明的第一部分,并假设他希望从单独的.txt文件中获取它们。

2 个答案:

答案 0 :(得分:12)

$(command)返回命令的输出。如果您执行$(cat some_file),它将返回文件的文本。您可以使用它来将文件的内容作为参数来执行:

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中注释的符号为// NOT head

head -c显示文件的第一行,{{1}}第一个字节。它不会删除文件。

答案 1 :(得分:1)

我所理解的问题是:

首先:您希望将文本文件的内容作为输入/参数传递给shell script

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

./YourScriptFile.sh $(cat YourInputFile.txt)

其次:您想要使用其内容。

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

$1, $3, $4, ..., $n

访问:

1st, 2nd, 3rd, ..., nth

输入文件中的标记(与新行无关)。

最后:您希望使用户名首先使用姓氏的3个字母,或者换句话说要使用extract characters from a string

一旦你有了令牌,它就很简单了。我建议如下:

FirstTwoChars_of_FirstToken=${1:0:2}
FirstTwoChars_of_SeventhToken=${7:0:2}

或者

LastTwoChars_of_FirstToken=${1:7:9} 
# if the first token is "FirstName" it would return you "me"

希望这可以帮助您改进代码。

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

#!/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"

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