Bash函数脚本

问题描述 投票:0回答:1

我的一项家庭作业遇到了很多困难,并且想知道我是否可以得到一些帮助。

以下是说明

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
bash function scripting
1个回答
1
投票

而IFS =:$ line -p uid _ user _ do

这包含多个错误。 $line不能被认为是一个有效的命令,-pread选项需要一个参数(如果这甚至是-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子目录。

© www.soinside.com 2019 - 2024. All rights reserved.