I learned that I can change the format of PS1, especially the color of the string. Then, is it possible to change the color based on the background color of the shell? Or, how can I detect the background color of the shell?
As far as I know, there's no way to query the colors of the terminal emulator. You can change them with
NUMBER is the terminal color number (0–7 for light colors, 8–15 for bright colors) and
#RRGGBB is a hexadecimal RGB color value) if your terminal supports that sequence (reference: ctlseqs).
Powerful color scheme mechanisms often have a dark or light background setting that you must supply to indicate whether you have a black or dark gray background, or a white or light gray background.
When you're configuring for yourself, it's usually enough to decide you'll always use the same background color.
If you are using gnome-terminal you can get the background color for any profile, in this case for the Default profile as
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/background_color #E12FE12FC74D
then you can decide how to set your prompt accordingly.
With xterm, you can query the background color with the
\e]11;?\a escape sequence. You need to read the response from the terminal. There is a
xtermcontrol command that does that for you:
~$ xtermcontrol --get-bg rgb:b0b0/b0b0/b0b0