我的一项家庭作业遇到了很多困难,并且想知道我是否可以得到一些帮助。
以下是说明
1.Sets an alias for the less command so that it will display line numbers when l is used and the filename is passed:
a. Ex: l filename
2.Reads the /etc/passwd file, use the variable Line to store the data
3.Uses a function to process the data read from /etc/passwd
a. Use the global variable, Line, when processing the data
b. Information passed to the function from the main script is:
1)The username field number
2)The UID field number
c. The function will determine which UIDs are less than 100 and then write those to a file named results.hw5.txt in the user’s home directory
i.use the form: user’s ID = UID /// user’s name = username
ii.Ex: user’s ID = 0 /// user’s name = root
d.Any variables created within the function must be local.
4.Uses the alias created in Step 1 to read results.hw5.txt
这是我到目前为止所拥有的。
#!/bin/bash
function func1
{
local filename=/etc/passwd
local results=~/My_Scripts/results.hw5.txt
while IFS=: $line -p uid _ user _
do
((uid<=100)) && echo "user id = $uid /// username = $user" > $results
done < $filename
}
alias l='less'
line=$(read)
func1
l $results
而IFS =:$ line -p uid _ user _ do
这包含多个错误。 $line
不能被认为是一个有效的命令,-p
的read
选项需要一个参数(如果这甚至是-p
的用途)。
创建别名的说明是错误的,但这里的明显教训是您可以在别名定义中包含一个选项。
alias l=`less -option`
(我不会放弃在这里使用的精确选项。查一查。)
您的规范说要处理循环内的每个passwd
条目。所以循环需要看起来像
while read -r line; do
funcname # argument "$line" is global implicit
done</etc/passwd
使用全局变量将信息传递给函数的指导也非常可疑。
line
的解析应该发生在函数内部 - 再次,一个令人怀疑的设计,但是这里。
funcname () { # prefer POSIX function definition syntax
# split on colons into positional parameters
local IFS=:
set -- $line
# now, $1 is account name, $2 is UID, etc
:
}
我不确定如何解释将字段编号作为参数传递给函数的指令。也许它希望$1
和$2
成为你可以传入的参数来识别要提取的字段? (提示:${$var}
。你显然需要在用set
覆盖位置参数之前捕获函数参数。)
顺便说一句,您没有将文件写入用户的主目录,从而违反了这些说明。也许省略My_Scripts
子目录。