Can grep return true/false or are there alternative methods
grep
returns a different exit code if it found something (zero) vs. if it hasn't found anything (non-zero). In an if
statement, a zero exit code is mapped to "true" and a non-zero exit code is mapped to false. In addition, grep has a -q
argument to not output the matched text (but only return the exit status code)
So, you can use grep like this:
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
As a quick note, when you do something like if [ -z "$var" ]…
, it turns out that [
is actually a command you're running, just like grep. On my system, it's /usr/bin/[
. (Well, technically, your shell probably has it built-in, but that's an optimization. It behaves as if it were a command). It works the same way, [
returns a zero exit code for true, a non-zero exit code for false. (test
is the same thing as [
, except for the closing ]
)
Another simple way is to use grep -c
.
That outputs (not return as exit code), the number of lines that match the pattern, so 0 if there's no match or 1 or more if there's a match.
So, if you wanted to check that the pattern is matched 3 or more times, you would do:
if [ "$(grep -c "^$1" schemas.txt)" -ge 3 ]; then
...
I know I am late for this, but I love this short version:
grep -q ^$1 schemas.txt && echo "Schema already exists. Please try again" || echo "$@" >> schemas.txt