Q:

Why do I use double quotes in shell scripts

I understand the usage single quote and double quote.
but I don't know situation need to double quotes in the script.
there is no diff that statements
$ echo hello world! $1
$ echo "hello world! $1"

please show me diff between normal and double quotes.

A:

Let's consider a directory with these files:
$ ls foo*
foo111.txt  foo11.txt  foo1.txt

Let's consider a minor variation on your script:
$ cat script
#!/bin/sh
echo No quotes $1
echo "Double quotes $1"

Now, let's run it:
$ bash script "foo*"
No quotes foo111.txt foo11.txt foo1.txt
Double quotes foo*

As you can see, the results are completely different.  Without the double quotes, pathname expansion is performed.
To illustrate another difference:
$ bash script "long              space"
No quotes long space
Double quotes long              space

With double quotes, the long space between words is preserved.  Without it, all contiguous whitespace is replaced with a single blank.  This is an example of word splitting.

