15

I have a String "ABCD" and a file test.txt. I want to check if the file has only this content "ABCD". Usually I get the file with "ABCD" only and I want to send email notifications when I get anything else apart from this string so I want to check for this condition. Please help!

ashutosh tripathi
  • 153
  • 1
  • 1
  • 7
  • Are you using a bash script? You can grab the contents of test.txt by doing `cat test.txt` and then compare with your string. – user3885927 Aug 31 '16 at 21:55
  • Please [edit] your question to show [what you have tried so far](http://whathaveyoutried.com). You should include a [mcve] of the code that you are having problems with, then we can try to help with the specific problem. You should also read [ask]. – Toby Speight Aug 31 '16 at 22:12

5 Answers5

28

Update: My original answer would unnecessarily read a large file into memory when it couldn't possibly match. Any multi-line file would fail, so you only need to read two lines at most. Instead, read the first line. If it does not match the string, or if a second read succeeds at all, regardless of what it reads, then send the e-mail.

str=ABCD
if { IFS= read -r line1 &&
     [[ $line1 != $str ]] ||
     IFS= read -r $line2
   } < test.txt; then
    # send e-mail
fi 

Just read in the entire file and compare it to the string:

str=ABCD
if [[ $(< test.txt) != "$str" ]]; then
    # send e-mail
fi
chepner
  • 497,756
  • 71
  • 530
  • 681
15

Something like this should work:

s="ABCD"
if [ "$s" == "$(cat test.txt)" ] ;then
    :
else
    echo "They don't match"
fi
NickD
  • 5,937
  • 1
  • 21
  • 38
9
str="ABCD"
content=$(cat test.txt)
if [ "$str" == "$content" ];then
    # send your email
fi
Scott Wang
  • 489
  • 1
  • 7
  • 9
  • I think you may need to add a not to your if statement? The author sounds as if they want to send the email if the contents does not match – Tomas Reimers Jan 13 '21 at 19:42
3
if [ "$(cat test.tx)" == ABCD ]; then
           # send your email
else
    echo "Not matched"
fi
sachin_ur
  • 2,375
  • 14
  • 27
0

Solution using grep:

    if grep -qe ^$MY_STR$ myfile; then \
        echo "success"; \
    fi
We'll See
  • 122
  • 1
  • 8
  • This matches for all files where `MY_STR` is a sub-string, right? Poster want to match only files where `MY_STR` is the entire content. `^` and `$` is anchors for a line, the the entire file. – Lii Aug 29 '23 at 08:59