Creo que los archivos .sh son "propiedad" de Xcode de forma predeterminada, por lo que si hicieras doble clic en uno de ellos, se abriría en Xcode en lugar de ejecutarse.
Los archivos .command y .tool son propiedad de Terminal de forma predeterminada, por lo que si hace doble clic en uno de ellos, se abrirá y ejecutará en Terminal.
No tengo conocimiento de ninguna otra diferencia entre ellos.
También he usado .sh para los scripts de shell, pero recientemente me detuve porque comencé a escribir mis scripts de shell en Zsh en lugar de sh, y fue confuso tratar de recordar si un determinado comando finalizó en .sh o .zsh, así que finalmente los puse todos en ~ / bin / y me aseguré de que fueran ejecutables, y no uso las extensiones de archivo en absoluto.