2016-10-06 39 views
0

我要打破有遵循這種風格多行的文件:新手的bash腳本

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

從文件的一個示例行:

[email protected];1912/06/23;visitor;/visitorData 

基本上我想打破所有行分成四個數組,可以在循環中稍後訪問,爲每條線創建一個新用戶。

  • 我已經聲明數組已經保存爲變量「文件名」

  • 用戶名必須是姓氏的前三個字母和名字的前三個字母的文件。

  • 密碼需要以用戶的生日作爲日/月/年。

到目前爲止,這是我的。我在正確的軌道上嗎?有哪些地方我出錯或可以改善?

#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

任何使用數組並將它們存儲在文件中的原因?爲什麼不在讀取時處理一行? – xvan

+0

我認爲這個問題可能會在[Code Review Stack Exchange](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命令來提取什麼是有用的和必需的,並且將它們存儲在變量,那麼可以使用反正他們自己想。你可以將它們重定向到一個文件,如果你想要或者打印出一個管道分離的輸出結果。

讓我知道..