I would think max(idx) should tell you the number of clusters dbscan found.
For linkage, I think this is easiest if you use the cluster function. This example comes from the documentation.
X = rand(20000,3);
Z = linkage(X,'ward');
c = cluster(Z,'Maxclust',4);
Therefore, max(c) should tell you the number of clusters.