Creo que los archivos .sh son "propiedad" de Xcode de manera predeterminada, por lo que si hiciera 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.
Yo 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 intentar recordar si un determinado comando terminó en .sh o .zsh, así que finalmente los puse todos en ~ / bin / y me aseguré de que fueran ejecutables, y no use extensiones de archivo en absoluto.