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 ..."
本文作者:南哈哈
本文链接:https://www.cnblogs.com/nanruosen/p/16315301.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步