2017-10-11 1 views
0

La première commande dans mon script bash est un grep d'un fichier existant pour les erreurs. EX:Bash, Si le fichier est vide, laissez le script sinon continuez

cat /usr/local/avamar/var/ddrmaintlogs/ddrmaint.log | grep "hfscheck-finish Backup directory missing for backup" > PartialBackups 
cat PartialBackups | sed -n -e 's#^.*cur/ ##p' >P2           
cat P2 | sed 's#/#//#g' > P3                
cat P3 | awk {'print $1'} >> S1                
cat P3 | awk {'print $3'} >> S2 

si newfile est vide (PartialBackups File) Je veux quitter le script, sinon je veux que le script continue

Comment puis-je faire?

+0

Vous approchez est faux, l'ensemble du script que vous avez posté devrait être un appel unique à awk. Si vous [éditez] votre question pour inclure une entrée d'échantillon concise et testable et une sortie attendue et que vous la marquez avec awk, nous pouvons vous aider. Aussi, où avez-vous eu l'idée que les délimiteurs de script ** ('' ') devraient aller ** à l'intérieur ** du script' {'print $ 1'} 'au lieu de le contourner' '{print $ 1}' ' ? J'ai vu quelques personnes faire cela et je suis juste curieux d'où vient cette idée. –

Répondre

1

Mettez le grep dans une instruction if.

if ! grep -err /file >> newfile; then 
    exit 
fi 

newfile peuvent ou peuvent ne pas être vide - vous ajout dans un fichier éventuellement non vide pour commencer - mais grep aura un statut de sortie non nulle si elle ne ajouter quoi que ce soit au fichier.

+0

J'attacherais '>> newFile' directement à la commande' grep'; sinon, cela ressemble à la meilleure réponse. –

+0

Maintenant, j'essaie de comprendre pourquoi je pensais qu'il devait être sur l'instruction 'if'. – chepner

0

Vous pouvez utiliser

if ! [ -s "/file" ];then 
    exit 
fi 

ou moins avec une syntaxe moins évidente

test -s "/file" && exit 

test -s teste si un fichier existe et a une taille non nulle. La seconde syntaxe exploite le fait que les opérateurs binaires n'évaluent que le nombre requis, donc une valeur de retour positive de test empêche l'exécution de exit, car l'expression serait de toute façon fausse.