Bash函数脚本

时间:2016-12-13 00:51:02

标签: bash function scripting

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

以下是说明

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

1 个答案:

答案 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子目录。