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 ..."

浙公网安备 33010602011771号