2016-10-06 2 views
0

나는이 스타일에 따라 여러 줄이있는 파일을 파괴 할 : 파일에서초급 bash는 스크립트

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

예 선 :

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

는 기본적으로 나는 각 라인업 헤어지고 싶어 루프에서 나중에 액세스 할 수있는 4 개의 배열로 각 행에 대해 새로운 사용자를 작성합니다.

  • 나는 배열이 이미 변수 '파일 이름'사용자 이름은 성 (姓)의 첫 세 글자와 이름의 첫 세 글자해야

  • 로 저장된 파일을 선언했다.

  • 암호는 사용자 생년월일로 일/월/년이어야합니다.

지금까지 내가 가지고있는 것입니다. 나는 올바른 길을 가고 있는가? 내가 잘못했거나 개선 할 수있는 곳이 있습니까?

#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$> 

기본적으로, 난 그냥 유용하고 필요한 사항을 추출 나오지 명령의 몇 가지를 실행하고, 변수에 저장하고 하나는 그들이 원하는 어쨌든 그들을 사용할 수 있어요. 파이프로 구분 된 출력을 원한다면 파일로 리디렉션 할 수 있습니다.

알려주세요 ..