2016-10-06 8 views
0

初心者のbashスクリプト

e-mail;year/month/date;groups;sharedFolder 

をファイルから例行:

基本的に
[email protected];1912/06/23;visitor;/visitorData 

私はそれぞれの行を分割したいですループで後でアクセスできる4つの配列に変換し、各行に新しいユーザーを作成します。

  • 私は配列はすでに変数「ファイル名」ユーザ名は、姓の最初の3つの文字と最初の名前の最初の3つの文字である必要が

  • として保存されたファイルを持っていると宣言しています。

  • パスワードは、ユーザーの生年月日(日/月/年)である必要があります。

これまでのところ、これは私が持っているものです。正しい軌道にいるのですか?私が間違って行ったり改良したりできる場所はありますか?

#reads file and saves into appropriate arrays 
while read -r line 
do 
    IFS = $';' read -r -a array <<< "$line" 

    mailArray += "$(array[0])" 
    dateArray += "$(array[1])" 
    groupArray += "$(array[2])" 
    folderArray += "$(array[3])" 
done < $filename 


#create usernames from emails 
for i in "$(mailArray[@])" 
do 
    IFS=$'.' read -r -a array <<< "$i" 

    part1 = ${array[0]:0:3} 
    part2 = ${array[1]:0:3} 

    user = $part2 
    user .= $part1 

    userArray += ("$user") 
done 


#create passwords from birthdates 
for i in "$(dateArray[@])" 
do 
    IFS=$'/' read -r -a array <<< "$i" 

    password = $part3 
    password .= $part2 
    password .= $part1 

    passArray += ("$password") 
done 
+1

配列を使用してファイルに保存する理由は何ですか?読んでいるときに1行だけを処理するのはなぜですか? – xvan

+0

この質問は、[コードレビュースタックエクスチェンジ](http://codereview.stackexchange.com/)でよりよくなるかもしれないと思います。 –

答えて

0

ない配列が、ここで必要とされる場合は必ず、あなただけのユーザ名を作成する場合は、目的の形式の行からのパスワード、下記を参照してください。

# Sample Input Data: 

bash$> cat d 
[email protected];1912/06/23;visitor;/visitorData 
[email protected];1966/06/23;metalhead;/metaldata 
[email protected];1900/00/00;idiot;/idiotique 
bash$> 

# Sample Output from script: 

bash$> ./dank.sh "d" 

     After processing the line [[email protected];1912/06/23;visitor;/visitorData], we have the following parameters extracted: 

     Name:   alan 
     Surname:  turing 
     Birthdate:  1912/06/23 
     username:  alatur 
     Password:  1912/06/23 



     After processing the line [[email protected];1966/06/23;metalhead;/metaldata], we have the following parameters extracted: 

     Name:   rob 
     Surname:  zombie 
     Birthdate:  1966/06/23 
     username:  robzom 
     Password:  1966/06/23 



     After processing the line [[email protected];1900/00/00;idiot;/idiotique], we have the following parameters extracted: 

     Name:   donald 
     Surname:  trump 
     Birthdate:  1900/00/00 
     username:  dontru 
     Password:  1900/00/00 

今行うスクリプト、この操作。

# Script. 

bash$> cat dank.sh 
#!/bin/bash 


cat "$1" | while read line 
do 
     name=`echo $line | sed 's/^\(.*\)\..*\@.*$/\1/g'` 
     surname=`echo $line | sed 's/^.*\.\(.*\)\@.*$/\1/g'` 
     bdate=`echo $line | sed 's/^.*;\(.*\);.*;.*$/\1/g'` 

     temp1=`echo $name | sed 's/^\(...\).*$/\1/g'` 
     temp2=`echo $surname | sed 's/^\(...\).*$/\1/g'` 

     uname="${temp1}${temp2}" 

     echo " 
     After processing the line [$line], we have the following parameters extracted: 

     Name:   $name 
     Surname:  $surname 
     Birthdate:  $bdate 
     username:  $uname 
     Password:  $bdate 

     " 
done 
bash$> 

基本的に、私はちょうど有用かつ必要であるものを抽出するためのsedコマンドのカップルを実行して、変数に格納して、一つは、彼らがしたいとにかくそれらを使用することができています。パイプで区切って出力したい場合は、ファイルにリダイレクトすることができます。

私に教えてください。