Shell循环:for

for循环

  循环次数是固定的

 

for语法结构

shell:
for 变量名 [in 取值列表]
do
    循环体
done

C语言:
for ((初值;条件;步长))
do
    循环体
done

 

示例

实现批量主机ping探测
#!/bin/bash

> ip.txt # 重定向,文件内容设置为空。
for i in {2..254}
do
    {
    ip=192.168.128.${i}
    ping -c1  ${ip} &>/dev/null
    if [ $? -eq 0 ];then
        echo "$ip is up" | tee -a ip.txt
    else
        echo "$ip is down"
    fi
    }&
done
wait  # 等前面所有的后台进程结束,执行以下命令。
echo "finish....."
实现批量用户创建
#!/bin/bash

while true
do
	read -p "Please enter prefix & passwd & num[nan 123 5]" prefix pass num
	printf "user infomation:
	-----------------------
	user prefix: $prefix
	user passwd: $pass
	user number: $num
	-----------------------
	"

	read -p "Are you sure?[y/n]: " action
	if [ "$action" = "y" ];then
	    break
	fi
done

for i in `seq -w $num`  # -w 等位补齐
do
	user=$prefix$i
	id $user &>/dev/null
	if [ $? -eq 0 ];then
	    echo "user $user already exists"
	else
	    useradd $user
	    echo "$pass" | passwd --stdin $user &>/dev/null
	    if [ $? -eq 0 ];then
		echo "$user is create."
	    fi
	fi
done
实现文件中批量用户创建1
cat user.list
nan
aaa

#!/bin/bash

# 定义密码
PASSWD=123.com

#定义脚本传参是否大于0
if [ $# -eq 0 ];then
    echo "Usage: sh `basename $0` file"
    exit 500
fi

#定义脚本传参是否为文件
if [ ! -f $1 ];then
    echo "$1 is not file"
    exit 501
fi

#循环创建用户
for user in `cat user.list`
do
    id $user &>/dev/null
    if [ $? -eq 0 ];then
        echo "user '$user' already exists"
    else
        useradd $user
        echo "$PASSWD" | passwd --stdin $user &>/dev/null
        if [ $? -eq 0 ];then
	    echo "'$user' is created."
        fi
    fi
done
实现文件中批量用户创建2
cat user.list
nan123 123

#!/bin/bash
#希望for处理文件按回车分隔,而不是空格或tab
#重新定义分隔符,IFS内部字段分隔符
#IFS=$'\n'
IFS='
'
for line in `cat user.list`
do
    #for循环空行不会影响脚本
    #if [ ${#line} -eq 0 ];then  #判断user.list 用户信息行内容是否为0
	#continue
    #fi
    user=`echo $line | awk '{print $1}'`
    pass=`echo $line | awk '{print $2}'`
    id $user &>/dev/null
    if [ $? -eq 0 ];then
        echo "user '$user' already exists"
    else
        useradd $user
        echo "$pass" | passwd --stdin $user &>/dev/null
        if [ $? -eq 0 ];then
	    echo "'$user' is created."
        fi
    fi
done
实现批量主机密码修改
#!/bin/bash

read -p "Please enter a New Password: " pass

for ip in $(cat ip.txt)
do
    {
	ping -c1 $ip &>/dev/null
	if [ $? -eq 0 ];then
	    ssh $ip "echo $pass | passwd --stdin root"
            if [ $? -eq 0 ];then
		echo "$(date +%F) ${ip} update password is ok!" >> alter_pass_`date +%F`_info.log
	    else
		echo "$(date +%F) ${ip} update password is error!" >> alter_pass_`date +%F`_error.log
	    fi
	else
	    echo "$(date +%F) ${ip} ping is error!" >> alter_pass_`date +%F`_error.log
	fi
    }&

done
wait
echo "finish..."
实现批量远程主机ssh配置
#!/bin/bash

for ip in `cat ip.txt`
do
    {
	ping -c1 $ip &>/dev/null
        if [ $? -eq 0 ];then
	    ssh $ip "sed -i '/^#UseDNS/c UseDNS no' /etc/ssh/sshd_config"
	    ssh $ip "sed -i '/^GSSAPIAuthentication/c GSSAPIAuthentication no' /etc/ssh/sshd_config"
	    ssh $ip "sed -i '/^SELINUX=/c SELINUX=enforcing' /etc/selinux/config"
            ssh $ip "systemctl stop firewalld && systemctl disable firewalld"
            ssh $ip "setenforce 0"
	fi
    }&
done
wait
echo "all ok ..."

 

posted @ 2022-05-26 21:27  南哈哈  阅读(201)  评论(0)    收藏  举报