Как я могу проверить, пуста ли строка в скрипте 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, Если вы не знаете, почему вы используете последний.
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"
