結論から書くとこんな感じです。(Windows)
type test.sql | sqlplus -s / as sysdba
つまり、sql ファイルの内容をパイプで sqlplus に渡してやります。
教科書通りだと、sqlplus -s / as sysdba @test.sql なのですが、これだと exit のない sql ファイルだと sqlplus 内の入力待ちで止まってしまいます。かといって、sql ファイルに exit を足すと、sqlplus を対話的に使っているときにその sql ファイルをSQL> @test.sqlな感じで呼び出すと sqlplus を exit してしまうので(汗