You originally said you wanted to check the bus, not set it, so I showed you an expression you could check; in an if statement perhaps.
Actually, I made a mistake. I should have wrote
(bus[BUS_WIDTH-1] && bus[BUS_WIDTH-2:0] == 0) // all bits low
The difference is '&&' is logical AND versus '&' is bitwise AND.
The '&bus' in line 2 is the reduction AND operator - that ANDs every bit int the bus together so that they all must be 1 to produce a 1.
In Verilog, x must be a parameter, not a variable. There can be no variable width expressions.
You could use a temporary bus variable:
// check if bit x is high and all others are low
bus_temp = bus;
bus_temp[x] = 0;
if (bus[x] && bus_temp == 0) ...
// set all bits to 0 and the x'th bit to 1:
bus <= 0;
bus[x] <= 1; // this works because last write wins.