我的一项家庭作业遇到了很多困难,并且想知道我是否可以得到一些帮助。
以下是说明
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
答案 0 :(得分:1)
而IFS =:$ line -p uid _ user _ 做
这包含多个错误。 $line
无法成为有效命令,-p
的{{1}}选项需要参数(如果这甚至是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
子目录。