目录
目录
一、case分支语句
使用 service firewalld start|stop|restart|status 来管理firewalld服务
判断输入类型
用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
二、for循环语句
两种书写方式
循环输出1-10
查看当前目录下所有内容for i in *;do echo $i;done
编辑
批量创建用户并修改密码
批量改名
三、while循环语句结构(迭代)
猜数字
while死循环
使用while批量添加用户
四、until 循环语句结构
求和1-100
五、结束循环----exit和break、continue
break:用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
continue:内循环2和外循环3不执行
针对变量的不同取值,分别执行不同的命令序列
与if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句指示判断一个变量的不同取值
格式:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
....
*)
默认命令序列
esac
#!/bin/bash
read -p "输入start|stop|status|restart:来管理防火墙:" firewalld
case $firewalld in
"start")
systemctl start firewalld
echo "防火墙已开启"
;;
"stop")
systemctl stop firewalld
echo "防火墙已关闭"
;;
"restart")
systemctl restart firewalld
echo "防火墙已重启"
;;
"status")
systemctl status firewalld
echo "防火墙状态查看"
;;
*)
echo "用法:$0{start|stop|status|restart}"
;;
esac
#!/bin/bash
read -p "请输入一个字符:" aa
case "$aa" in
[0-9])
echo "你输入的是数字"
;;
[a-z]|[A-Z])
echo "你输入的是字母"
;;
*)
echo "你输入的是符号"
esac
#!/bin/bash
case $jieya in
*.tar.gz)
if [ -f $jieya ]
then
tar -zxvf $jieya -C /opt &> /dev/null
echo "$jieya 文件解压成功"
else
ehco "$jieya 压缩文件不存在"
fi
;;
*.tar.bz2)
if [ -f $jieya ]
then
tar -jxvf $jieya -C /opt &> /dev/null
echo “$jieya 文件解压成功”
else
echo "$jieya 压缩文件不存在"
fi
;;
*)
echo "文件名输入错误"
;;
esac
~
for 变量名 in 取值列表
do
命令序列
done
for (( 变量取值范围 ))
do
命令序列
done
法一:
for i in {1..10}
do
echo $i
done
法二:for((i=1;i<=10;i++ ))
do
echo $i
done
for i in *
do
echo $i
done
for user in {1..10}
do
echo stu${user}|xargs -n1 useradd
echo "123123"|passwd --stdin stu${user}
done
cd /data1 //切换到要执行操作的目录
for i in *
do
name=`echo $i |cut -d "." -f1`
mv $i ${name}.bak
done
格式:
while 条件测试操作
do
命令序列
done
#!/bin/bash
pc_num=$[RANDOM%3+1]
count=0
while true
do
read -p "请输入一个数字:" user_num
if [ $user_num -eq $pc_num ]
then
echo "答对啦"
break
elif [ $user_num -gt $pc_num ]
then
echo "你的数字太大了"
else
echo "你的数字太小了"
fi
let count++
done
echo 你输入的次数为:$count
while true:死循环有时候也有独特用处,可与用户交互
#!/bin/bash
while true
do
read -p "请输入yes退出:" KEY
if [ $KEY = yes ]
then
break
fi
done
echo "正常退出"
[root@localhost ~]# bash demo12.sh
请输入yes退出:ee
请输入yes退出:ww
请输入yes退出:qrq
请输入yes退出:sf
请输入yes退出:yes
正常退出
#!/bin/bash
i=0
while [ $i -le 19 ]
do
let i++
useradd stu$i
echo "123456" | passwd --stdin stu$i &> /dev/null
echo "stu$i添加成功"
done
echo "添加完毕"
until 条件测试操作
do
命令序列
done
#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo "{1..100}的和:$sum"
影响的范围 exit > break > continue
break和continue、exit 0用来控制循环结构,主要是停止循环
break :有时候我们想在某种条件出现的时候终止循环而不是等到循环条件为false才终止。 这时我们可以使用break来完成。break用于完全结束一个循环,跳出循环体执行循环后面的语句。
continue :continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。 可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环
break:跳出循环
语法 break 将用于以下break语句退出循环:
break n 这里n指定的第n个封闭的循环退出。
continue:结束本次循环
语法 continue 和break语句一样,一个整数参数可以给continue命令跳过嵌套循环的命令。
continue n 这里n指定第n个封闭循环 continue 。
exit:退出脚本,exit 2代表退出后返回值为2
#!/bin/bash
for((i=1;i<=3;i++))
do
read -p "请输入密码:" key
if [ $key -eq 123456 ];then
echo "密码正确"
break
else
echo "密码错误"
fi
done
echo "输入错误三次,报警处理"
for((i=1; i<=5; i++ ))
do
echo"外部循环 i=$i"
for((j=1; j<=5; j++))
do
if [ $j -eq 2 -o $i -eq 3 ];then
# continue
# break
fi
echo -e "\t内循环 j = $j"
done
done
打开break
[root@localhost ~]# bash xun.sh
外部循环 i = 1
内循环 j = 1
外部循环 i = 2
内循环 j = 1
外部循环 i = 3
外部循环 i = 4
内循环 j = 1
外部循环 i = 5
内循环 j = 1
打开continue
[root@localhost ~]# bash xun.sh
外部循环 i = 1
内循环 j = 1
内循环 j = 3
内循环 j = 4
内循环 j = 5
外部循环 i = 2
内循环 j = 1
内循环 j = 3
内循环 j = 4
内循环 j = 5
外部循环 i = 3
外部循环 i = 4
内循环 j = 1
内循环 j = 3
内循环 j = 4
内循环 j = 5
外部循环 i = 5
内循环 j = 1
内循环 j = 3
内循环 j = 4
内循环 j = 5
continue在while循环中注意使用,容易死循环,下题终止了迭代,进入了死循环
#!/bin/bash
a=1
while [ $a -le 5 ]
do
echo "外部循环$a"
b=1
while [ $b -le 5 ]
do
echo -e "\t内部循环$b"
if [ $b -eq 3 ];then
continue
fi
let b++
done
let a++
done
~