I may be wrong, but tnsping output will never be "null".
IMO, the answer that jim mcnamara gave, which he has since deleted, was the correct answer.
You should test the result of the tnsping command, not necessarily the output.
# Listener not running...
/home/oracle > tnsping db1
TNS Ping Utility for Linux: Version 10.2.0.3.0 - Production on 15-JUN-2010 17:08:51
Copyright (c) 1997, 2006, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/10.2/db_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = DB1)))
TNS-12541: TNS:no listener
/home/oracle > echo $?
1
# Start listener
/home/oracle > lsnrctl start
LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 15-JUN-2010 17:08:59
Copyright (c) 1991, 2006, Oracle. All rights reserved.
Starting /u01/app/oracle/product/10.2/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.3.0 - Production
System parameter file is /u01/app/oracle/product/10.2/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.3.0 - Production
Start Date 15-JUN-2010 17:08:59
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/10.2/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/product/10.2/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "DB1" has 1 instance(s).
Instance "DB1", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
# Listener running
/home/oracle > tnsping db1
TNS Ping Utility for Linux: Version 10.2.0.3.0 - Production on 15-JUN-2010 17:09:04
Copyright (c) 1997, 2006, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/10.2/db_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = DB1)))
OK (10 msec)
/home/oracle > echo $?
0
So...
if tnsping db1 > /dev/null; then
echo Listener running
else
echo Listener not running
fi
This says absolutely nothing about whether any database is actually running!
edit: I've renamed your thread from if else question in unix to Test if Oracle listener is running (which may not be a perfect title, but at least other forum members who know about Oracle will see it, and may offer better help :))