На мой взгляд так плохо делать, т.к. выполнение двух таких команд породит винегрет. А вот такая команда, не позволит сделать винегрет.
 
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. Но и в Ваших скриптах они тоже есть.