In Linux is there a way to distinguish between two connected hard drives and tell which one is eSATA through shell or anyother way?
Technically, there is no way to distinguish between Sata and eSata. The SATA specs tell you that the only difference between the two is a physical connector. The protocol is the same.
On another note, technically an OS can't even tell the difference between a physical drive and a virtual drive. The BIOS and chipset can tell the OS whatever it wants and the OS won't be the wiser. This is the basics of abstraction.
Type in the following command:
Simply replace /dev/sda with whatever your two device addresses are.
This will give you full specifications of the attached hard drive, and then just take the "model number" that it throws out and google to check if it's a SATA or ESATA drive.
You can also tell if it's running at its correct speed checking the information at the bottom of the report.