Reputation: 579
I have a roles.txt file that contains
admin
user
SELECT ROLE_NAME FROM SENTRY_ROLE WHERE ROLE_NAME produces:
admin
Im trying to echo all the roles from roles.txt that are not in the sql_output (user in this example). This is what i have so far:
for filename in roles.txt
do
sql_output=$(mysql -N -e "SELECT ROLE_NAME FROM SENTRY_ROLE WHERE ROLE_NAME = '$filename';")
if [ -z "$sql_output" ]
then
echo "sql_output is empty" #this is where i want to echo all the roles that are not in the output of sql_output AKA "user"
else
echo "\$sql_output is in sql_output"
fi
done
Upvotes: 1
Views: 390
Reputation: 246847
That's not how you iterate over the lines of a file. See http://mywiki.wooledge.org/BashFAQ/001
I would do this, with a single mysql call:
# Iassume this does not produce any extraneous output,
# just a list of role names, one per line
sql_output=$( mysql -N -e "SELECT distinct ROLE_NAME FROM SENTRY_ROLE" )
missing_roles=$( comm -23 roles.txt <(echo "$sql_output") )
See http://manpages.ubuntu.com/manpages/bionic/en/man1/comm.1.html
Upvotes: 1