Com sqlplus
você deve usar abordagem diferente para as variáveis do shell. Seu comando deve se tornar:
/app/oracle/product/10.2.0/bin/sqlplus -s user_name/passwd @effective_date.sql "$Last_Month" "$first_date" "$last_date"
e seu script sql devem ser:
set heading off
set feedback off
set verify off
set pagesize 50000
set trimspool on
set wrap off
set newpage none
set linesize 2000
spool /home/dir/file_'&1';
select * from table_1
where effective_date between to_date('&2','dd-mm-yyyy') and to_date('&3','dd-mm-yyyy');
spool off;
exit;