[root@linux-server script]# vim ip.sh
#!/usr/bin/env bash
# Author:
src_ip="192.168.246"
for i in {2..254}
do
{
ping -c1 $src_ip.$i &>/dev/null
if [ $? -eq 0 ];then
echo "alive: $src_ip.$i" >> ip_up.txt
echo "alive: $src_ip.$i"
else
echo "down: $src_ip.$i" >> ip_down.txt
echo "down: $src_ip.$i"
fi
} &
done
wait
echo "finish..."
[root@linux-server script]# chmod +x ip.sh
[root@linux-server script]# ./ip.sh
参数详解:
wait:等待上面命令后台执行结束后(即上一个的进程终止),在执行下面的echo命令
for循环批量创建用户
[root@linux-server script]# vim user.sh
#!/usr/bin/bash
read -p "请设置用户名/数量/密码: " prefix num pass
cat <<-EOF
用户前缀:$prefix
用户数量:$num
用户密码:$pass
EOF
for i in $(seq 1 $num)
do
user=$prefix$i
id $user &> /dev/null
if [ $? -eq 0 ];then
echo "$user is already exist!"
exit 0
else
useradd $user &> /dev/null
echo $pass | passwd --stdin $user &>/dev/null
fi
done
echo "starting create users..."
[root@linux-server script]# chmod +x user.sh
[root@linux-server script]# ./user.sh
参数详解:
seq 打印序列号,只跟数字
seq 命令用于产生从某个数到另外一个数之间的所有整数。
seq命令的原理就不说了,这里说说为什么不能在{ }中使用变量。其实原因写在bash的man手册中:
大意是说,Bash中会最先展开{ }中的内容,这个时候$NUM还不会被具体的值替代,所以是i在循环中读取的是‘{1..$NUM}’的一个完整的字符串,输出时$NUM会被10替代,就有了'{1..10}'这样的结果。