shell脚本之for循环的使用方法及示例
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
技术是没有终点的,也是学不完的,最重要的是活着、不秃。 学习看书还是看视频,都不重要,重要的是学会,欢迎关注,我们的目标---不秃。
---更多运维开发交流及软件包免费获取请加V: Linuxlaowang