Try quoting the wildcard:
$ find /usr -name \*.sh
or:
$ find /usr -name '*.sh'
If you happen to have a file that matches *.sh in the current working directory, the wildcard will be expanded before find sees it. If you happen to have a file named tkConfig.sh in your working directory, the find command would expand to:
$ find /usr -name tkConfig.sh
which would only find files named tkConfig.sh. If you had more than one file that matches *.sh, you'd get a syntax error from find:
$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list
Again, the reason is that the wildcard expands to both files:
$ find /usr -name tclConfig.sh tkConfig.sh
Quoting the wildcard prevents it from being prematurely expanded.
Another possibility is that /usr or one of its subdirectories is a symlink. find doesn't normally follow links, so you might need the -follow option:
$ find /usr -follow -name '*.sh'