web-dev-qa-db-fra.com

Comment puis-je tester si la ligne est vide dans le script Shell?

J'ai un script Shell comme celui-ci:

cat file | while read line
do
    # run some commands using $line    
done

Maintenant, je dois vérifier si la ligne contient un caractère non blanc ([\ n\t]), et sinon, sautez-le. Comment puis-je faire ceci?

30
planetp

Étant donné que read lit les champs séparés par des espaces par défaut, une ligne contenant uniquement des espaces devrait entraîner l'affectation de la chaîne vide à la variable, vous devriez donc pouvoir ignorer les lignes vides avec simplement:

[ -z "$line" ] && continue
62
Arkku

essaye ça

while read line;
do 

    if [ "$line" != "" ]; then
        # Do something here
    fi

done < $SOURCE_FILE
10
NSC

frapper:

if [[ ! $line =~ [^[:space:]] ]] ; then
  continue
fi

Et utilise done < file au lieu de cat file | while, sauf si vous savez pourquoi vous utiliseriez ce dernier.

cat i inutile dans ce cas si vous utilisez en boucle de lecture. Je ne sais pas si vous vouliez ignorer les lignes vides ou si vous voulez ignorer les lignes qui contiennent également au moins un espace blanc.

i=0
while read -r line
do
  ((i++)) # or $(echo $i+1|bc) with sh
  case "$line" in
    "") echo "blank line at line: $i ";;
    *" "*) echo "line with blanks at $i";;
    *[[:blank:]]*) echo "line with blanks at $i";;
  esac
done <"file"
2
ghostdog74
if ! grep -q '[^[:space:]]' ; then
  continue
fi
blank=`tail -1 <file-location>`
if [ -z "$blank"  ]
then
echo "end of the line is the blank line"
else
echo "their is something in last line"
fi
0
Rounak