본관은 보성(寶城). 자는 사신(思愼), 호는 친친재(親親齋). 판서 선형(宣炯)의 증손이며, 아버지는 도사(都事) 선상(宣祥)이다.
1569년(선조 2)에 겸사복(兼司僕)에 천거되어 10년의 임기를 마치고 1579년(선조12년) 무과에 급제하였다. 1586년 함경북도 병마절도사 이일(李鎰)의 계청군관(啓請軍官)이 되었다.
1587년 조산만호(造山萬戶)이었던 이순신(李舜臣)과 함께 녹둔도(鹿屯島)에서 변방을 침범하는 여진족을 막아 공을 세웠다. 1588년 거제현령·진도군수를 역임하고 이어 청백(淸白: 맑고 깨끗한 행세)으로 성주목사를 거쳐 1591년에 전라도수군절도사가 되었다.
임진왜란이 일어나자 그 해 7월에 한산도해전에 참가하여 전라좌수사 이순신을 도와 왜적을 크게 무찔렀다. 1592년 12월 독산산성(禿山山城) 전투에서는 전라도병사로서 전라순찰사 권율(權慄)과 함께 승첩을 올렸는데 이 때 크게 부상당하였다.
이어 다음 해인 1593년 2월 행주산성 전투에 참가하여 권율이 적을 대파하는 데 공을 세웠다. 같은 해 9월에는 함안에 주둔하고 있던 적군이 약탈을 일삼고 있었으므로 이를 공격하다가 부상을 당하였다. 그 뒤 충청병사에 올랐다.
한산도에 내려와서는 이순신을 도와 둔전(屯田)을 일으켜 많은 군곡(軍穀)을 비축, 공을 세웠다. 1594년 9월에는 이순신과 함께 장문포(長門浦) 해전에서 또 공을 세웠다. 그 뒤 충청수사가 되고 다음 해 황해병사가 되었다.
1597년 정유재란 때에는 남해·상주 등지에서 활약하였다. 1598년에는 울산 전투에 참가, 명장 양호(楊鎬)를 도와 싸우다 전사하였다. 이순신과 절친한 사이로 전투에서도 서로 도와 이름이 높았다. 1605년(선조 38) 선무원종공신일등(宣武原從功臣一等)에 추봉되고 보성의 오충사(五忠祠)에 제향되었다.