Usando $(OS) , como se documenta en otras respuestas, puede distinguir entre Windows_NT y Unix (que incluye tanto Linux como macOS), pero no entre diferentes sistemas similares a Unix. Si está utilizando MSBuild 15.3 o posterior (lo cual es muy probable), puede considerar usar [MSBuild]::IsOsPlatform() :
<Exec Command="./foo.sh" Condition="$([MSBuild]::IsOSPlatform('Linux'))" />
El argumento puede ser el nombre de cualquier OsPlatform miembro.
La variable es $(OS) , generalmente verificado contra ser o no ser Windows_NT :
<Exec Command="./foo.sh" Condition=" '$(OS)' != 'Windows_NT' " />