渔民桑提阿果老了,运气也糟透了。84天以来,他天天出海,却又天天空船而归,连他的帆看上去都像是一面“标志着老打败仗的旗子”。他的老伴死了,以前跟他打鱼的小孩曼诺林也在父母的强迫下,到其他船帮忙去了。但曼诺林很尊重老人,每见老头回来,总要走下岸去,帮他收拾钓丝、鱼钩、鱼叉什么的。
老人的陋屋空空如也,老人与小孩说着晚上的饭菜(其实并不存在),谈着喜爱的棒球队,将对话日复一日继续下去。曼诺林照顾着老人,为他买来便餐,准备好明日用的鱼饵。老人睡了,他不再像年轻时那样老梦见狂风巨浪、大鱼、搏斗之类的事,而是梦见异域他乡和沙滩上的顽皮可爱的狮子。
这是老人没打到鱼以来的第85天出海了。天气晴朗,海面平静。他向远海划去,决心冲破霉运,捕一条大鱼。他一面划船,一面与大海、鱼、海鸟交谈,自孩子曼诺林离开他以后,他便养成了这种自言自语的习惯。
他感到钓竿动了。他觉得在下面100寻深处,一条马林鱼正吃着钩尖上的沙丁鱼。他拉拉钓丝,知道鱼很大。鱼很聪明,上钩后并不惊惶失措猛拉猛扯,它只是拉着小船向浩渺的海面缓缓游去。整个白天在奇怪的旅行中度过了。老人拉着钓丝的肩酸痛异常。此时,他多渴望孩子仍旧留在他身边,那就能搭一把手了。同时,他对鱼也产生了奇怪的感情,他欣赏鱼的勇气和聪明。夜里,老人很疲乏,他希望自己能睡上一会儿。第二天,老人除了深深的疲惫外,左手又开始抽筋,而且痛得厉害。他终于看见了浮出海面的鱼,它比小船还长,非常漂亮。午后,抽筋停止了,老人吃了点生鱼,为即将到来的抗衡积蓄能量。夜里,老人的手在鱼的又拉又跳中,皮开肉绽,鲜血淋漓。
第三天,鱼开始打转儿,这是较量即将结束的迹象。鱼露出水面,老人努力将它拽近些,再拽近些。他忍住一切疼痛,使出全身力气,将鱼叉干净利落地扎进鱼腰。大鱼很快在挣扎中死去,老人将它捆在船边,开始返航。
可是,老人的麻烦并未结束。死鱼的血招来了鲨鱼。它们循着航线游来,大口大口地咬掉鱼肉。老人成功地杀死了一条鲨鱼,但鲨鱼下沉时也带走了鱼叉,不得已,老人只好凑合着用刀子、棍子、船舵与鲨鱼们搏斗。当半夜小船驶进港时,昼夜的搏斗已使老人筋疲力竭了。那条大鱼也已残缺不全,它的美丽和它那贵重的鱼肉都已不复存在。