2013-09-25 4 views
1

"$ CRN"파일에 전자 메일 주소 목록을 추가하는 스크립트가 있습니다. 이 스크립트가 다시 실행되면이 스크립트가이 이전 목록에 추가됩니다. 이전 목록에 추가하는 대신 새 목록으로 덮어 쓰길 원합니다. 필요한 경우 전체 스크립트를 제출할 수 있습니다. 나는 "$ CRN"이 존재하고 파일을 제거했는지 테스트 할 수 있다는 것을 알고 있지만, 다른 제안에 관심이 있습니까? 감사.파일 덮어 쓰기 후 추가

for arg in "[email protected]"; do 
      if ls /students | grep -q "$arg"; then 
        echo "${arg}@mail.ccsf.edu">>$CRN 
        ((students++)) 
      elif ls /users | grep -q "$arg$"; then 
        echo "${arg}@ccsf.edu">>$CRN 
        ((faculty++)) 
    fi 

답변

2

더 나은 다음을 수행

CRN="/path/to/file" 
:> "$CRN" 

for arg; do 
     if printf '%s\n' /students/* | grep -q "$arg"; then 
       echo "${arg}@mail.ccsf.edu" >> "$CRN" 
       ((students++)) 
     elif printf '%s\n'/users/* | grep -q "${arg}$"; then 
       echo "${arg}@ccsf.edu" >> "$CRN" 
       ((faculty++)) 
     fi 
done 
  • ls 출력을 구문 분석하지 않습니다! 대신 bash glob을 사용하십시오. ls은 대화식으로 파일 정보를 보는 도구입니다. 그 출력물은 사람을 위해 포맷되고 스크립트에 버그를 일으킬 것입니다. globs를 사용하거나 대신 찾습니다. 이유를 이해 : http://mywiki.wooledge.org/ParsingLs
  • "큰 따옴표" 확장자와 특수 문자를 포함 할 수있는 모든 문자. "$ var", "$ @", "$ {array [@]}", "$ (명령)". foobar, 일치 : arg=fooglob 같은 잘못된 반응에 http://mywiki.wooledge.org/Quoteshttp://mywiki.wooledge.org/Argumentshttp://wiki.bash-hackers.org/syntax/words
  • 돌봐를 참조하십시오. 단어 경계를 원한다면 grep -qw이 필요합니다. UP2U
+0

'grep -qw' 사례가 추가되었습니다. –