To raczej nie skrypt, tylko kod źródłowy.
Bonus == tutoriale na starym forum, między innymi wczytywanie nieokreślonej ilości danych w C#
Podany tam spoób nie jest jedynym.
Inna metoda, to wczytywanie "do oporu", i gdy nie będzie już nic do wczytania wystąpi błąd i obsługę przejmie procedura obsługi błędu [wyjątku], która wypisze "kupę" komunikatów i przerwie gwałtownie program. Możemy więc napisać własną obsługę takiego błędu, która po prostu zakończy normalnie i łagodnie program, bez wypisywania komunikatów.
Jednak lepszą [łatwiejszą] metodą, jest niedopuszczenie do powstania takiego błędu.
Tutaj dodatkowym źródłem błędu w twoim kodzie, jest dzielenie wczytanego stringu [metodą Split] w momencie, gdy jest on zerowej długości "" lub jest obiektem null.
W uzupełnieniu do tutorialu, można też np tak [dla pętli for ( ; ; )
for (; ; ){
var cab1 = Console.ReadLine();
if (cab1 == null || cab1.Length < 1) break; //gdy nic [już] nie wczytaliśmy
var cab = cab1.Split(); // Split(' ') lub Split(null)