проверьте, пуста ли строка, используя bash - PullRequest
16 голосов
/ 21 июля 2010

Я пытаюсь сделать простое сравнение, чтобы проверить, пуста ли строка, используя bash:

line=$(cat test.txt | grep mum )
if [ "$line" -eq "" ]
        then
        echo "mum is not there"
    fi

Но это не работает, оно говорит: [: слишком много аргументов

Большое спасибо за вашу помощь!

Ответы [ 7 ]

26 голосов
/ 21 июля 2010

Вы также можете использовать переменную $?, для которой задан статус возврата команды.Таким образом, у вас будет:

line=$(grep mum test.txt)
if [ $? -eq 1 ]
    then
    echo "mum is not there"
fi

Для команды grep, если есть какие-либо совпадения, $? устанавливается в 0 (завершено чисто), и если нет совпадений, $? равно 1.

8 голосов
/ 21 июля 2010
if [ ${line:-null} = null ]; then
    echo "line is empty"
fi

или

if [ -z "${line}" ]; then
    echo "line is empty"
fi
5 голосов
/ 21 июля 2010

Классический ответ sh, который также будет работать в bash:

if [ x"$line" = x ]
then
    echo "empty"
fi

Ваша проблема также может заключаться в том, что вы используете '-eq' для арифметического сравнения.

4 голосов
/ 21 июля 2010
if line=$(grep -s -m 1 -e mum file.txt)
then
    echo "Found line $line"
else
    echo 'Nothing found or error occurred'
fi
4 голосов
/ 21 июля 2010
grep "mum" file || echo "empty"
2 голосов
/ 04 апреля 2014

Я думаю, что самое ясное решение - это регулярное выражение:

if [[ "$line" =~ ^$ ]]; then
    echo "line empty"
else
    echo "line not empty"
fi
0 голосов
/ 02 мая 2014

Если вы хотите использовать PHP с этим,

$path_to_file='path/to/your/file';
$line = trim(shell_exec("grep 'mum' $path_to_file |wc -l"));
if($line==1){
   echo 'mum is not here';
}
else{
   echo 'mum is here';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...