公元27年,刘秀逐渐在西汉末混战中脱颖而出,成为全国最大的割据军阀。遂有志扫平海内,一统天下。而当时横在他面前的还有数十个割据政权,其中较大的有西南的公孙述占据全蜀,兵精粮足;西面的隗嚣,占据陇上,拥兵十余万;北面的彭宠,占据燕北,与匈奴联络,其势不小;东面的刘永,占据鲁南,淮上,拥兵数十万;还有占据着鲁中的张步、占据东海的董宪,他们都与刘永联手,接受其封号,距离刘秀最近,也威胁最大。
张步当时占据富庶的胶东及鲁中十三郡,拥兵十余万,而耿弁军方三万余人,众寡之势已分。但寡军的偏要取攻势,而众者却步步设防,形成了局部以多击少的势态。
公元29年秋,耿弁率军东进,渡过黄河,抵达洛水西岸。张步得知耿军来攻,采取了御敌于国门之外的防御战略,派大将军费邑沿历下(今山东济南)至仄山一线布防,结营十余座,费邑率主力镇守历下以为策应。
耿弁侦知敌人的布防部署,决定先从敌人防线的最薄弱处下手,撕开一处,动摇全线。决心已定,他挥军渡过济水,以迅雷不及掩耳之势包围了视阿(今山东济南西),旋即发起猛攻。耿军士兵乘新到之锐气,前赴后继,蜂拥爬城,早晨开始进攻,至午时就攻破城池。耿弁机智地令围兵网开一面,好让视阿的溃兵逃向钟城(今仄山北)。张步手下的兵也真的不济事,钟城守军看到视阿兵那惊恐万状的狼狈相,不由得心生惶惑,未及耿弁兵到,先弃城逃跑,耿弁一日之内,连下两城。
张步大将费邑一开仗就丢了两城,未免有些惊慌,唯恐历下城有失,遂派其弟费敢率兵一部扼守巨里(今山东历城东北),以保障历下侧翼安全。
本来,历下城城高池深,粮食充足,如果费邑不分兵,那耿弁还真不好攻。费邑愚蠢地分兵巨里,给了耿军可乘之机。耿弁决定以围点打援战术,将费邑诱出城来,于野战中歼灭。
部署已定,耿弁兵临巨里城下,派兵砍伐树木,大造攻城器具,把声势搞得大大的,扬言三日后将大举攻城。同时又故意让一些俘虏逃走,让他们跑到历下向费邑报告耿军将要进攻巨里的消息。
费邑闻讯,正在踌躇,其弟费敢又派人前来求救。费邑手足情深,遂率精兵出城,昼夜兼程,来援巨里。
耿弁见敌人已中计,心中大喜,马上以三千人继续围攻巨里,再将其余人马埋伏于自历下往巨里的半途的两侧山冈之上。设下口袋,专等敌人上钩。
费邑不知就里,率大军急匆匆地赶路,不知不觉钻进了耿军的埋伏圈。只听一声炮响,山冈上杀下无数耿军,将费邑军截成数段。费邑军仓促遇伏,被惊得目瞪口呆,很多人未及抵抗就身首异处。不大工夫,费邑连他本人的三万精兵就烟消云散了。
耿弁命人将费邑的首级挑在竹竿上令巨里守军观看,费敢吓得魂飞魄散,星夜弃城逃走。这样一来,张步的防线悉数瓦解,费邑军七八万大都被歼,张步的首府剧县暴露于耿军兵锋之前。
第一道防线被攻破,仍没能使张步清醒过来,他仍然采用被动防御的战略,连忙又布下第二道防线,急令其弟张蓝率领精兵二万守西安(今山东临淄西北)。另外凑集诸郡兵马一万守临淄,两城相距四十余里,互为犄角之势,作为剧县的最后一道屏障。
先攻西安还是先攻临淄,成为摆在耿弁面前的一道难题。西安城虽小,但兵多城坚,临淄城虽大,但兵力薄弱,守军系统紊乱,各不相能。当时的情势是这样的,如果先攻临淄,那么西安必然出兵援救,造成围攻部队内外夹击的威胁。如果先攻西安,虽说临淄未必来援,但却一时半会儿难以攻下,顿兵坚城之下,死伤必多,即使能攻下来,张蓝引兵逃入临淄,合兵一处,再攻临淄势必困难百倍。当时耿弁孤军远征,只宜速战,而不宜拖久,否则日久兵疲、后续不继、运输困难,后果不堪设想。
面对这重重困难,耿弁想出了一个声东击西,击弱避强的巧计。召开将领会议声称日后进攻西安,然后故意把这个消息泄露出去,好让西安守军知道。却于当夜率军潜行至临淄城下,以迅雷不及掩耳之势发起突然进攻。临淄城大兵少,本来就觉兵力不足,因为防守疏忽,闻说耿军欲攻西安,更是不以为备,一下子就让耿军突入城内,守军顷刻瓦解。耿军占领临淄,断绝了西安与剧县的联系,使其孤悬于外,张步之弟张蓝心存恐惧,遂弃城逃往剧县,这样,连西安也送给耿军了。
第二道防线又被打破,张步实在没有办法了,行黔驴之计,倾巢出动,凑集二十万大军反攻临淄,以图趁耿军兵少力疲之际一战破之。说实话,如果张步早一点集中优势兵力与耿弁决战,那么双方胜负就未可知了。可惜,张步只知被动防御,眼看着一点点地被耿弁吃掉外围,待精兵损失过半,重镇临淄也落入敌手之后再来反攻,一来精兵已损,临时凑起的大军半为乌合之众,战斗力不强;二来耿弁可以据坚城临淄,深堑高垒,以逸待劳,反客为主,进可攻,退可守。地利之便本来是张步的,现在反为耿弁占去。
果然,精明的耿弁就是采用依托临淄,以逸待劳的作战方针。为此,他上书刘秀,评述这一方针的始末:“臣依托临淄,深堑高垒,张步从剧县来攻,疲劳饥渴。想要进攻,我就诱他进来打击之;想要退,我就追着屁股打他。臣依托营驿与坚城,累了就休息,保持锐气,以逸待劳,以实击虚,十五天之内,张步的脑袋就要搬家了。”
在此后的战斗中,形势果然如耿弁设计的那样,张步的二十万大军步步挨打,最后被耿弁吃掉。
刚开始,耿弁为了诱敌上钩,主动派兵占据淄水上游,拉开一个狙击敌人的架势。不久,碰上了张步的前锋,稍一接触,耿弁马上下令撤兵,故意示弱以骄敌。张步军不知是计,引大兵至,耿弁将精兵隐蔽于城内,另派都尉刘歆、泰山太守陈俊分别列兵于城外。张步见城外耿军军势较弱,遂挥军进攻。正打得不可开交,耿弁乘机率城内主力,突然从翼侧突入敌阵,双方一场大战。在激战中,一支敌箭射中耿弁大腿,他毫不以为意,回身拔出箭来,继续指挥作战,终于重创敌军,张步留下片片尸体退了回去。
第二天,张步不甘失败,整军再战,又被杀败。刘秀闻听张步率大军反攻,唯恐耿弁兵少有失,遂亲自率军来援。耿弁部将陈俊听到消息,劝耿弁暂且休息,待刘秀援兵到了再打。耿弁却说:“皇上驾到,我们应当杀牛备酒迎驾,怎么能把大批敌军留给皇上呢!”遂不顾陈俊的劝阻,再次出城大战。双方厮杀了一整天,尽管张步兵多,但多系乌合之众,当不得大战阵,最后终于败了下来,张步军的尸体填满了临淄郊外的沟堑。经此一战,张步再也无力反攻了。
耿弁料到张步数败之后必然撤兵,事先就在张步营垒两侧埋上伏兵,侍张步拔营一撤,伏兵骤起,杀得张步措手不及,士卒自相践踏,死伤累藉。张步率少数残兵,仓皇逃回剧县。待到数日后刘秀援军到达,张步已成釜底游鱼,只待最后会餐了,援军竟无所用之。刘秀高兴地将耿弁与韩信相比,夸他的成功比韩信还要难。不久,耿弁围剧县,迫得张步最后拱手而降。