Here is an example using bash and Oracle's sqlplus tool: #!/bin/bash #Defaults USER="user" PASS="pass" PATH="database" #Usage function usage { echo " " echo "Usage: " echo " " echo " ${0##*/} [-u] [-p] [-d] SEX " echo " " echo " -u | --user + Username + ${USER} " echo " -p | --pass + Password + ${PASS} " echo " -d | --path + Database + ${PATH} " echo " " echo " SEX + M/F " echo " " } if [[ "$1" =~ ^((-{1,2})([Hh]$|[Hh][Ee][Ll][Pp])|)$ ]]; then usage; exit 1 else while [[ $# -gt 0 && "$1" =~ ^-{1,2}.* ]]; do opt="$1" shift; current_arg="$1" if [[ "$current_arg" =~ ^-{1,2}.* ]]; then echo "ERROR: You left an argument blank." >&2 exit 1 fi case "$opt" in "-u"|"--user" ) USER="$1"; shift;; "-p"|"--pass" ) PASS="$1"; shift;; "-d"|"--path" ) PATH="$1"; shift;; * ) echo "ERROR: Invalid option: \""$opt"\"" >&2 exit 1;; esac done fi SEX=$1 if [[ "${SEX}" != "M" && "${SEX}" != "F" ]]; then echo "ERROR: Invalid value for SEX" >&2 exit 1 fi sqlplus -s $USER/$PASS@$PATH << __SQL__ set echo off head off pages 0 trimspool on feedback off timing off time off SELECT * FROM mytable WHERE sex = '${SEX}'; exit __SQL__ Here is an example using PROC SQL in SAS, just replace the bottom: #ensure sas in $PATH sas -stdio -sysparm "$USER $PASS $PATH $SEX" << __SAS__ 2>/dev/null DATA _NULL_; CALL SYMPUTX('sex', CATS("'", "%scan(&sysparm, 4)", "'")); RUN; PROC SQL; CONNECT TO ORACLE(USER=%scan(&sysparm, 1) PASS=%scan(&sysparm, 2) PATH=%scan(&sysparm, 3)); SELECT * FROM CONNECTION TO ORACLE ( SELECT * FROM class WHERE sex=&sex ); DISCONNECT FROM ORACLE; QUIT; __SAS__ Or do it all in SAS with a macro: #!/bin/bash SYSPARM=$(echo ${@} | tr " " ",") /usr/local/SASHome/SASFoundation/9.4/sas -stdio -sysparm "$SYSPARM" << __SAS__ 2>/dev/null %macro mymacro(sex, USER=foo, PASS=bar, PATH=mydb)/minoperator; data _null_; file stdout; put "NOTE: USER=&user PASS=&pass PATH=&path"; run; %if not(&sex in M F) %then %do; data _null_; file stdout; put "ERROR: Invalid value for SEX"; run; %abort return 1; %end; proc sql; select * from sashelp.class where sex="&sex."; quit; %mend; %mymacro(&sysparm.); __SAS__ Obviously, these are all overly simple examples.
... View more