当前位置:   article > 正文

Linux中的shell脚本之流程控制&&循环遍历

Linux中的shell脚本之流程控制&&循环遍历

3 条件判断

在这里插入图片描述

4 流程控制语句

1)if 语句

案例,用户输入用户名和密码,判断用户名是否是admin,密码是否是123,如果正确,则显示登录成功

首先我创建了shell文件,touch getpawer 其中getpawer 是我自己命的名

#!/bin/bash
read -p "请输入账号:" uname
n=$uname
read -p "请输入密码:" upwd
m=$upwd
if (("n"=="admin" && "m"=="123"))
then echo "登录成功"
else echo "登录失败"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

效果展示如下:

[root@localhost ~]# vi getpawer
[root@localhost ~]# sh getpawer
请输入账号:451
请输入密码:31031
登录失败
[root@localhost ~]# sh getpawer
请输入账号:admin
请输入密码:123
登录成功
[root@localhost ~]# admin
-bash: admin: command not found
[root@localhost ~]# sh getpawer
请输入账号:admin
请输入密码:321
登录失败
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2)case语句:用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令

# 基础语法
case 变量 in1)
语句1 ;;2)
语句2 ;;
esac # 用于结束case语句,case反过来就是esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

案例,判断某个月份是多少天

#!/bin/bash
read -p "请输入要查询的月份:" month
echo "你要查询的月份是:$month月"
case $month in
1|3|4|7|8) echo "$month月有31天";;
4|6|9|11|12) echo "$month月有30天";;
2) echo "$month月有28天";;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

效果如下:

[root@localhost ~]# vi getday
[root@localhost ~]# sh getday
请输入要查询的月份:3
你要查询的月份是:3月
3月有31天
  • 1
  • 2
  • 3
  • 4
  • 5

3)for循环

一个案例来了解语法,送出10次玫瑰花

#!/bin/bash
flowers=( "第1" "第2" "第3" "第4" "第5" "第6" "第7" "第8" "第9" "第10")
for n in ${flowers[*]}
do
echo "我喜欢你,这是我送你的第$n朵玫瑰花"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

效果展示:

[root@localhost ~]# sh getflower
我喜欢你,这是我送你的第第1朵玫瑰花
我喜欢你,这是我送你的第第2朵玫瑰花
我喜欢你,这是我送你的第第3朵玫瑰花
我喜欢你,这是我送你的第第4朵玫瑰花
我喜欢你,这是我送你的第第5朵玫瑰花
我喜欢你,这是我送你的第第6朵玫瑰花
我喜欢你,这是我送你的第第7朵玫瑰花
我喜欢你,这是我送你的第第8朵玫瑰花
我喜欢你,这是我送你的第第9朵玫瑰花
我喜欢你,这是我送你的第第10朵玫瑰花
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

升级版:

#!/bin/bash
flowers=( "牡丹花" "玫瑰花" "桂花" "兰花" "梅花" "太阳花" "水仙花" "茉莉花" "小米花" "大红花")
sum=0
for i in ${flowers[*]} # 从数组中去出所有元素
do
sum=$(($sum+1))  
        echo "我喜欢你,送你的第$sum朵花是$i"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

效果如下:

[root@localhost ~]# sh getflower1
我喜欢你,送你的第1朵花是牡丹花
我喜欢你,送你的第2朵花是玫瑰花
我喜欢你,送你的第3朵花是桂花
我喜欢你,送你的第4朵花是兰花
我喜欢你,送你的第5朵花是梅花
我喜欢你,送你的第6朵花是太阳花
我喜欢你,送你的第7朵花是水仙花
我喜欢你,送你的第8朵花是茉莉花
我喜欢你,送你的第9朵花是小米花
我喜欢你,送你的第10朵花是大红花
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4)while 循环

语法:

​ while 循环条件

​ do

​ 循环语句

​ done

案例:输出10次为梦想而战

#!/bin/bash
i=1 # 循环参数从1开始
while(($i<=10)) # 只有i<=10的时候程序才会向下执行
do
i=$(($i+1))  # 每执行一次i的值就加一,是为了当i=11时就停止,也就实现了循环10次
echo "为梦想而战!!!"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

效果如下:

[root@localhost ~]# sh shell1
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
为梦想而战!!!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

综合案例,用户输入自己的考试成绩,当成绩低于60,计算出距离60分的差距,并提示用户有2个选择,选择1是放弃,转专业,选择后弹出5句,别灰心,三百六十行行行出状元,当选择2时,是继续坚持备考下一次测试,并弹出5句,帅哥,你坚持的样子很酷,选择3时则提示,选择无效,请重新选择。当输入成绩大于60,则弹出,颁奖开始:第一个奖品本子是由蔡老师颁发,第二个本子是由王老师颁发…。

代码展示如下:

#!/bin/bash
read -p "请输入你的专业成绩:" grade
n=$grade
if (("$n"<"60"))
then
fs=$((60-$n))
echo "$fs"
echo "你的成绩是$n,离及格成绩60分还差$fs分"
echo "选择操作1:不再继续,我要转专业"
echo "选择操作2:我要继续战斗,下次考试一定及格"
read -p "请输入你的选择(1or2):" m
xz=$m
echo "你的选择是:$xz"
case $xz in
1) echo "你的选择是:不再继续,想要转专业,送你5句话"
i=1
while(($i<=5))
do
i=$(($i+1))
echo "别灰心,三百六十行,行行出状元"
done;;
2) echo "你的选择是:继续坚持备考下一次测试,送你5句话"
q=1
while(($q<=5))
do
q=$(($q+1))
echo "帅哥,你坚持的样子很酷!!!"
done;;
3) echo "选择无效,请重新选择"
esac
else
echo "专业成绩及格,现在由老师们给你颁发奖品:"
name=("蔡老师" "王老师" "刘老师" "李老师")
jiangli=("本子" "钢笔" "电脑" "鼠标")
lengh=${#name[@]}
for ((sum=1; sum <=$lengh ; sum++))
do
 echo "第$sum个奖励${jiangli[$sum-1]}是由${name[$sum-1]}颁发的"
done
fi

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

效果如下:

在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号