2016-12-13 13 views
0

私は宿題の1つで多くの問題を抱えています。ここでBash関数スクリプト

は、ここで説明

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 

ある私がこれまで持っているものです。 IFS =ながら

#!/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

'Line while read;のようなものが必要です。行う ...; done Barmar

+0

この関数は、ユーザー名とUIDをパラメーターとみなしています。 – Barmar

+0

ループの 'Line'にラインを読み込み、それからユーザ名とUIDを抽出し、' func1 $ username $ uid'を呼び出す必要があります – Barmar

答えて

0

は:$ライン-p uidが_ _ユーザーが

を行うこれは、複数のエラーが含まれています。 $lineは有効なコマンドであるとは期待できません。-pのオプションはreadに引数を必要とします(-pがここにある場合でも)。

エイリアスを作成する手順は間違っていますが、エイリアス定義にオプションを含めることができます。

alias l=`less -option` 

(私はここで使用するための正確なオプションを配っていないよ。それを検索します。)

あなたの仕様では、ループ内の各passwdエントリを処理するために述べています。だから、ループが関数に情報を渡すために、グローバル変数を使用する

while read -r line; do 
    funcname # argument "$line" is global implicit 
done</etc/passwd 

指針のようなものを見て必要も非常に疑わしいです。

lineの解析は、機能の中で再び起こるはずですが、疑わしいデザインですが、ここに入ります。

フィールド番号を関数のパラメータとして渡すように命令を解釈する方法がわかりません。たぶん$1$2は、抽出するフィールドを識別するために渡すことができるパラメータにしたいと思うでしょうか? (ヒント:${$var}。そして、あなたは明らかに位置引数を上書きする前に関数の引数をキャプチャする必要があります。

脇に、ユーザのホームディレクトリにファイルを書き込まないことで命令に違反しています。サブディレクトリMy_Scriptsを省略することもできます。

関連する問題