TheNewGuy
TheNewGuy

Reputation: 579

using for in loop with sql output

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

Answers (1)

glenn jackman
glenn jackman

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

Related Questions