Shell编程之循环语句与函数

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。


推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

Shell编程之循环语句与函数

前言

脚本执行任务的时候总会遇到需要重复执行的时候,为了节省资源,除了计划任务,我们还可以使用脚本来完成,接下来就是Shell脚本中的三种循环。

一、for循环

for循环,又有人称之为条件循环,或者for i in ,其实就是for循环的特性,次数和给与的条件是成正比的

for语句结构

读取不同的变量值,用来逐个执行同一组命令

for 变量名 in 取值列表
do
命令序列
done

Shell编程之循环语句与函数_bash

例题:

1、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

Shell编程之循环语句与函数_for循环_02

Shell编程之循环语句与函数_转义字符_03

2、求1到该数的奇数和,偶数和

Shell编程之循环语句与函数_for循环_04

Shell编程之循环语句与函数_bash_05

3、批量添加用户
用户名存放在users.txt文件中,每行一个
初始密码均为123456
验证

Shell编程之循环语句与函数_转义字符_06

Shell编程之循环语句与函数_转义字符_07

Shell编程之循环语句与函数_for循环_08

Shell编程之循环语句与函数_for循环_09

Shell编程之循环语句与函数_bash_10

4、根据IP地址检查主机状态
IP地址存放在ipadds.txt文件中,每行一个
使用ping命令检查各主机的连通性

这题基本和上题一样的

Shell编程之循环语句与函数_转义字符_11

Shell编程之循环语句与函数_for循环_12

Shell编程之循环语句与函数_转义字符_13

二、while循环

只要条件成立,则反复循环,不成立即停止

1、while语句结构

 
while 条件测试操作
do
命令序列
done

Shell编程之循环语句与函数_for循环_14

例题:

1、计算从1到100所有整数的和

Shell编程之循环语句与函数_转义字符_15

Shell编程之循环语句与函数_for循环_16

2、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

Shell编程之循环语句与函数_转义字符_17

Shell编程之循环语句与函数_for循环_18

3、批量添加用户
用户名以qqq开头,按数字顺序进行编号
一共1-20,添加20个用户
初始密码均设为123456

Shell编程之循环语句与函数_for循环_19

Shell编程之循环语句与函数_转义字符_20

三、until循环

重复测试某个条件,只要条件不成立则反复循环

1、until语句结构

 

until 条件测试操作
do
命令序列
done

until 条件测试操作
do
命令序列
done

Shell编程之循环语句与函数_for循环_21

例题:

1、计算1~50的和

Shell编程之循环语句与函数_转义字符_22

Shell编程之循环语句与函数_bash_23

四、常用转义字符

 

echo -n 表示不换行输出

echo -e 输出转义字符,将转义后的内容输出到屏幕上

常用的转义字符如下: \b 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。

\c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n; 但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

\n 换行,被输出的字符从"\n"处开始另起一行。

\f 换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v 与\f相同;

\t 转以后表示插入tab,即横向制表符;

\r 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

\\ 表示插入"\"本身;

五、例题:购物

逛淘宝选购商品,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

[root@promote opt]#vim shopping.sh

#!/bin/bash
#每家商店有五种商品选购,每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#衣服500元
#裤子400元
#鞋子300元
#帽子150元
#袜子50元

sum=0
for ((;;))
do
echo "1、衣服:500元"
echo "2、裤子:400元"
echo "3、鞋子:300元"
echo "4、帽子:150元"
echo "5、袜子:50元"

read -p "请选择您想要购买的商品:" a
case $a in
1)
echo "您已购买了衣服500元"
let sum+=500
;;
2)
echo "您已购买了裤子400元"
let sum+=400
;;
3)
echo "您已购买了鞋子300元"
let sum+=300
;;
4)
echo "您已购买了帽子150元"
let sum+=150
;;
5)
echo "您已购买了袜子50元"
let sum+=50
;;
*)
echo "欢迎下次光临,您本次消费共计$sum元"
break
esac

read -p "您选择继续购物还是结算购物车?(y/n)" b
if [ $b = y ] ; then
continue
elif [ $b = n ] ; then
echo "欢迎下次光临,您本次购物共计消费$sum元"
break
else
echo "请您正确输入"
fi
done

Shell编程之循环语句与函数_bash_24

Shell函数——代码的复用

将命令序列按格式写在一起,可方便重复使用命令序列

一、Shell函数格式

【1】

function 函数名 {
命令序列
}

函数名() {
命令序列

函数名() {
命令序列
}

二、函数返回值

return表示退出函数并返回一个退出值,脚本中可以用 $ ? 变量显示该值

使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时值将为除以256取余

function db1 {
read -p "请输入:" value
return $[$value * 2]
}
db1
echo $?

Shell编程之循环语句与函数_for循环_25

Shell编程之循环语句与函数_转义字符_26

db1() {
read -p "请输入:" value
echo $[$value * 2]
}
result=`db1`
echo $result

Shell编程之循环语句与函数_bash_27

Shell编程之循环语句与函数_转义字符_28

三、传参

sum() {
s=$[$1 + $2]
echo $s
}
sum $1 $2

Shell编程之循环语句与函数_for循环_29

Shell编程之循环语句与函数_bash_30

四、函数变量的作用范围

函数在Shell脚本中仅在当前Shell环境中有效

Shell脚本中变量默认全局有效

将变量限定在函数内部使用local命令

 
ak () {
local i #设置局部变量
i=8
echo $i
}


i=9 #全局环境
ak
echo $i

#!/bin/bash
abc () {
local i #设置局部变量
i=8
echo $i
}


i=9 #全局环境
abc
echo $i

五、 递归阶乘

函数调用自己本身的函数
fact() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
read -p "请输入:" n
result=$(fact $n)
echo $result

Shell编程之循环语句与函数_转义字符_31

sh -x 加脚本名 ,可以查看脚本运行过程,有助于理解

Shell编程之循环语句与函数_bash_32

六、递归目录

function list_files () {
for f in 'ls $1'
do
if [-d "$1/$f" ] ;then
echo "$2$f" #如果是目录就输出这个目录,$2为空格是用于区分父子目录
list_files "$1/$f" " $2"

else
echo "$2$f" #不是目录则输出$f结果
fi

done
}

list_files "/var/log" ""

"

七、创建库

在一个脚本当中建立多个函数,用于别的脚本来调用该库中的函数

root@localhost ~]vim 3.sh
jiafa() {
echo $[$1 + $2]
}

chengfa() {
echo $[$1 * $2]
}

jianfa() {
echo $[$1 - $2]
}

chufa() {
if [ $2 -ne 0 ];then
echo $[$1 / $2]
else
echo "$2不能为0"
fi
}


[root@localhost ~]#vim 4.sh
#!/bin/bash
. /root/3.sh
read -p "输入第一个参数值:" first
read -p "输入第二个参数值:" second

result1=`jiafa $first $second`
result3=$(chengfa $first $second)
result2=`jianfa $first $second`
result4=$(chufa $first $second)

echo $result1
echo $result2
echo $result3
echo $result4

总结

for语句的结构

while语句的结构

until语句的结构

Shell函数定义方法

数组使用方法

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux运维老纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值