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