На мой взгляд так плохо делать, т.к. выполнение двух таких команд породит винегрет. А вот такая команда, не позволит сделать винегрет.
ip rule add table 1000 priority 2150
ip rule | grep 1000
Найдет и таблицу 100010 и 11000, так что не совсем красиво.
Если не должен выполнятся при запуске, тогда асинхронный запуск не нужен. Для общеобразовательной цели
https://unix.stackexchange.com/questions/86247/what-does-ampersand-mean-at-the-end-of-a-shell-script-line
Можно заменить на такое:
cat $1 | grep -Eo '^([0-9]{1,3}\.){3}[0-9]{1,3}($|/[0-9]{1,2}$)' | sed 's/^/route /' | sed 's/$/\/32 via "'$2'";/' >> $3
Но c ограничениями, строка должна заканчиваться на \n, не должно быть пробелов перед и после ip. Но и в Ваших скриптах они тоже есть.