2013-09-25 8 views
1

J'ai une boucle dans mon script qui va ajouter une liste d'adresses email à un fichier "$ CRN". Si ce script est exécuté à nouveau, il s'ajoutera à cette ancienne liste. Je veux l'écraser avec la nouvelle liste plutôt que de l'ajouter à l'ancienne liste. Je peux soumettre mon script entier si nécessaire. Je sais que je pourrais tester si "$ CRN" existe, puis supprimer le fichier, mais je suis intéressé par d'autres suggestions? Merci.écraser un fichier puis ajouter

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 

Répondre

2

Mieux faire:

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 
  • ne pas Parse ls sortie! utilisez bash glob à la place. ls est un outil pour l'examen interactif des informations sur les fichiers. Sa sortie est formatée pour les humains et causera des bogues dans les scripts. Utilisez globs ou trouvez à la place. Comprendre pourquoi: http://mywiki.wooledge.org/ParsingLs
  • "Double citation" chaque expansion, et tout ce qui pourrait contenir un caractère spécial, par exemple. "$ var", "$ @", "$ {tableau [@]}", "$ (commande)". Voir http://mywiki.wooledge.org/Quoteshttp://mywiki.wooledge.org/Arguments et http://wiki.bash-hackers.org/syntax/words
  • prendre soin de faux positifs comme arg=foo et glob: foobar, qui correspondent. Vous avez besoin de grep -qw alors si vous voulez des limites de mots. UP2U
+0

Ajouté le cas 'grep -qw' –

Questions connexes