This script uses the ping command to find out the available machines on the network. It uses a for loop to iterate through a list of IP addresses generated by the expression 192.168.0.{1..255}. The {start..end} notation generates values between start and end. In this case, it creates IP addresses from 192.168.0.1 to 192.168.0.255.
ping $ip -c 2 &> /dev/null runs a ping command to the corresponding IP address. The -c option causes ping to send only two packets. The &> /dev/null redirects both stderr and stdout to /dev/null, so nothing is printed on the terminal. The script uses $? to evaluate the exit status. If it is successful, the exit status is 0, and the IP address which replied to our ping is printed.
In this script, a separate ping command is executed for each address, one after the other. This causes the script to run slowly when an IP address does not reply, since each ping must wait to time out before the next ping begins.