[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}'这样的结果。