1、什么是循环?

程序和人的生活是非常紧密的,在去公司的路上碰见美女?去打招呼?去上班?

2、什么是for循环

一般叫做条件循环

语法示例

语法格式:
for var in filel file2 fiel3
do
echo 123
done

#打印12345
for var in {1..5}
do
echo $var
done

[root@bgx she1l]# cat for-6. sh
#!/bin/bash
IFS=$'\n' #回车为分割符
for i in、cat /etc/hosts ;
do
echo "$i"
done
[root@bgx she11]# cat for-7.sh
#! /bin/bash
IFS=: #冒号做分隔符
list= head -1 /etc/passwd
for i in $list
do
echo $i
done

for循环基本使用示例, C语言风格的for

#语法格式
for ((i=0;i<10;i++))
do
	commmands
done

案例分析:


需求4:获取系统的所有用户并输出。效果如下:
This is 1 user: root
This is 2 user: bin
This is 3 user: daemon
This is 4 user: adm
...............

i=1
for user in $(awk -F ":" '{print $1}' /etc/passwd)
do
	echo This is ${i} $user
	#let i++ 
	i=$[ $i + 1 ]
done

需求5:批量创建100个用户,比如输入oldxu则会创建oldxu01-100。
for user in $(seq -w 1 100)
do
	useradd $1$user
	echo "$1$user is ok"
done
-----------------------------------------------------
for user in $(seq -w 1 10)
do
	id $1$user &>/dev/null
	if [ $? -ne 0 ];then
		useradd $1$user
		echo "$1$user is ok"
	else
		#表示结束当前本次的循环,直接开始下一次循环
		continue
	fi
done



需求6:批量创建用户脚本,需要用户输入创建的用户数量,以及需要用户输入创建的前缀。例如:前缀oldxu,个数10,代表创建oldxu1~oldxu10,总共10个用户。

read -p "请输入你需要创建的前缀: " qz
read -p "请输入你需要创建的数量: " hz
read -p "你要创建的用户是 $qz , 个数是 $hz 你确定要创建吗? [ y | n ] " : Action
case $Action in
	y|yes|Y)
			for number in $(seq $hz)
			do
				username=$qz$number
				id $username &>/dev/null
				if [ $? -ne 0 ];then
					useradd $username
					echo "$username is ok"			
				else
					#表示结束当前本次的循环,直接开始下一次循环
					continue
				fi
			done
		;;
	n|no|N)
			echo "Bey!"
			exit 
		;;
	*)
		echo "Gdx"
		exit
esac


需求7:批量创建用户脚本,需要用户输入创建的用户数量(必须是整数),同时还需要用户输入前缀(前缀不能为空)。
例如:前缀oldxu,个数10,代表创建oldxu1~oldxu10,总共10个用户。

[root@manager for]# cat useradd-new.sh 
#!/usr/bin/bash

read -p "请输入你需要创建的前缀: " qz
if [ -z $qz ];then
	echo "回车做什么  gdx...."
	exit
fi

read -p "请输入你需要创建的数量: " hz
if [[ ! $hz =~ ^[0-9]+$ ]];then
	echo "让你输数字,,,,emm"
	exit
fi
read -p "你要创建的用户是 $qz , 个数是 $hz 你确定要创建吗? [ y | n ] "  Action
case $Action in
	y|yes|Y)
		for number in $(seq $hz)
		do
			username=$qz$number
			id $username &>/dev/null
			if [ $? -ne 0 ];then
				useradd $username
				echo "$username is ok"			
			else
				#表示结束当前本次的循环,直接开始下一次循环
				continue
			fi
		done
		;;
	n|no|N)
			echo "Bey!"
			exit 
		;;
	*)
		echo "Gdx"
		exit
esac


需求8:循环批量创建用户,需要填入用户的数量、用户的前缀、用户的统一密码(使用read、case、for语句)
[root@manager for]# cat useradd-passwd.sh 
#!/usr/bin/bash

read -p "请输入你需要创建的前缀: " qz
if [ -z $qz ];then
	echo "回车做什么  gdx...."
	exit
fi

read -p "请输入你需要创建的数量: " hz
if [[ ! $hz =~ ^[0-9]+$ ]];then
	echo "让你输数字,,,,emm"
	exit
fi

read -p "请输入所有用户统一的密码: " pw


read -p "你要创建的用户是 $qz , 个数是 $hz  密码是 $pw 你确定要创建吗? [ y | n ] "  Action
case $Action in
	y|yes|Y)
		for number in $(seq $hz)
		do
			username=$qz$number
			id $username &>/dev/null
			if [ $? -ne 0 ];then
				useradd $username
				echo "$pw" | passwd --stdin $username
				echo "$username $pw is create ok"			
			else
				#表示结束当前本次的循环,直接开始下一次循环
				continue
			fi
		done
		;;
	n|no|N)
			echo "Bey!"
			exit 
		;;
	*)
		echo "Gdx"
		exit
esac

需求9:通过读入文件中的用户,进行批量添加用户(前提user.txt中有用户)
[root@manager for]# cat user-file.sh 
for user in $(cat user.txt)
do
	useradd $user

done

需求10:通过读入文件中的用户与密码文件,进行批量添加用户。文件中的格式: user:passwd
for user in $(cat user.txt)
do
	us=$(echo $user|awk -F ":" '{print $1}')
	pw=$(echo $user|awk -F ":" '{print $2}')

	id $us &>/dev/null
	if [ $? -eq 0 ];then
		continue
	else
		useradd $us
		echo "$pw" | passwd --stdin $us &>/dev/null 
		echo "$us is create ok......"
	fi

done

需求11:使用case实现批量删除用户。
1.提示用户输入需要删除的用户以及删除的个数。
2.如果用户存在则删除,如果不存在则提示no such user。
[root@manager for]# cat for5.sh 
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-31
#FileName:            for4.sh
read -p "请输入你要创建用户的前缀:" Action
read -p "请输入密码长度:" Nu
for i in {01..10}
do 
	useradd "$Action$i" 
	pw=$(mkpasswd -l $Nu)
	echo "$pw" |passwd --stdin $Action$i
	echo $Action$i : $pw &>>3.txt
	echo  "$Action$i创建成功"
done

技术是没有终点的,也是学不完的,最重要的是活着、不秃。