first commit, implement the command line interface by getopt(GNU)