I needed to send a command (actually two separate) over ssh to check for the presence of a user (username) on a remote system. The command needed to be constructed entirely from variables. This is the solution I crafted (after much trial and error).
You will see that I send two ssh commands because I need to check for two styles of username (flast and first.last). These functions are run inside a follower-script called by a leader-script responsible for gathering a host of data regarding departing users.
The leader passes a trio of variables into the follower. The follower then crafts some variables of its own. It is from all of this that the final command is crafted.
## #! /usr/bin/env bash # Title : termuserSub_Nagios.sh # Parent : termuser.sh # Author : JamesIsIn 20180719 Do something nice today. # Purpose : # SOP : https://some.url/display/ops/NOC+Terminator+Script # : https://some.url/display/ops/Termination+Procedure+-+NOC # ############### # Variables # # # debugging # scriptUser_linux= # termuser_flast= # termuser_firstDotLast= # # # the original script included the following note: # using test nagios results in halved execution times (compared to prod); all configs in sync readonly const_nagiosHost="nagios.some.url" readonly const_nagios_cgi="/usr/local/nagios/etc/cgi.cfg" declare termuser_firstDotLast_grep declare termuser_flast_grep ## ############### # Functions # function func_sshCommand() { local loc_sshArguments="-n -l ${scriptUser_linux} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet" local loc_sshHostCommand="grep -c \"${1}\" ${const_nagios_cgi}" # this is complex # the export is for filling the passed parameter which is a variable name # that passed variable name is then filled with the output from ssh # where ssh is loaded from a trio of variables export "$( printf '%s' "$( printf '%s' "${2}" )"="$( ssh $( printf '%s' " ${loc_sshArguments} ${const_nagiosHost} ${loc_sshHostCommand}" ) )" )" } function main() { # printf '%s\n' "Your password will be required for two tests. " func_sshCommand "${termuser_firstDotLast}" termuser_firstDotLast_grep func_sshCommand "${termuser_flast}" termuser_flast_grep if [ ! "${termuser_firstDotLast_grep}" == "0" ] || [ ! "${termuser_flast_grep}" == "0" ] ; then printf '%b\n' "" "Nagios user found. Please remove the following user from the nagios cgi.cfg file. " if [ ! "${termuser_firstDotLast_grep}" == "0" ] ; then printf '%s\n' "${termuser_firstDotLast} (${termuser_firstDotLast_grep}) " fi if [ ! "${termuser_flast_grep}" == "0" ] ; then printf '%s\n' "${termuser_flast} (${termuser_flast_grep}) " fi printf '\n' return 1 else return 0 fi } ## ########## # Main # main exit $? ## ##
The magic finally happens in the admittedly somewhat cryptic export line (hence the preceding lines of comment).
Clever? You be the judge.