Как я могу проверить, пуста ли строка в скрипте shell?

У меня есть скрипт вроде этого:

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

теперь мне нужно проверить, содержит ли строка какой-либо символ без пробелов ([nt ]), а если нет, пропустите его. Как я могу это сделать?

5 ответов


С read читает поля, разделенные пробелами по умолчанию, строка, содержащая только пробелы, должна привести к назначению пустой строки переменной, поэтому вы должны иметь возможность пропускать пустые строки только с помощью:

[ -z "$line" ] && continue

попробуй такое

while read line;
do 

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

done < $SOURCE_FILE

Баш:

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

и использовать done < file вместо cat file | while, Если вы не знаете, почему вы используете последний.


if ! grep -q '[^[:space:]]' ; then
  continue
fi

cat я бесполезен в этом случае,если вы используете цикл чтения. Я не уверен, хотите ли вы пропустить пустые строки или хотите пропустить строки, которые также содержат хотя бы пробел.

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"