绪论:
循环:重复执行一段代码的结构,通过循环可以满足一定的条件下,多次执行相同的代码
循环语句:
循环体:代码的总结构,循环条件,当循环条件满足时,循环体内的代码才会执行,条件不满足,循环结束。不
目录
遍历:对数据库结构中的每个元素都进行一次访问的过程。进行操作或者输出
循环和遍历是结合在一起的
循环实际上是一种控制流程的结构,用于重复执行代码
1、循环语句
1.1 循环的特点
· 重复执行代码
· 可以简化程序的逻辑,提高程序的可读性和可理解性,降低代码出错的可能性
· 提高了代码的重复利用率
· 提高了效率,循环可以自动化让程序执行,减少了人工的干预
循环的作用就是批量的执行代码的一种方式,减少人工干预,提高效率
1.2 for循环语句
1.2.1 for循环语句的特点
for的第一种方式:
· for循环主要用于已知次数的循环
· 语法结构:
for 变量名 in 取值列表
do
命令序列,对取值范围内的变量进行特定操作
done
· 无限循环: for((;;)) 也就是死循环
eg:批量添加用户,用户名存放在user.txt文件中,每行一个初始密码为123456.验证脚本
vim进去添加几个用户
vim user.txt
yh1
yh2
yh3
yh4
~
vim yh.sh
编辑
set -x
for i in $(cat /opt/user.txt)
do
useradd $i
echo 123456 | passwd --stdin $i
done
set +x
sh yh.txt运行一下
eg:根据IP地址检查主机状态,IP地址存放在ipadds.txt文件中,每行一个,使用ping命令检测各主机的通性,ping放进/opt/hosts.txt,不通提示
vim 1.sh
编辑:
for i in $(cat /opt/ipadds.txt)
do
ping -c 5 $i
if [[ $? -eq 0 ]]
then
echo "成功"
wcho "$i" >> /opt/hosts.txt
else
echo "失败"
fi
done
保存退出
vim ipadds.txt
20.0.0.70
20.0.0.40
保存退出
sh执行
for的第二种方式
for i in {1..5} 表示1到5
eg:vim xunhuan.sh
for i in {1..10}
do
echo $i
done保存退出
sh执行
for的第三种方式:类C语言格式
for ((表达式1;表达式2;表达式3))
do
命令序列
done
eg:for ((i=1;i<=10;i++))
do
echo $i
done
eg:计算1-10的和
vim qiuhe.sh
sum=0
for i in {1..10}
do
sum=$(($i+$sum))
done
eg:计算1-100的奇数和偶数的和
vim he.sh
sum1=0
sum2=0
for i in {1..100}
do
if [[ $i%2 -eq 0 ]]
then
sum1=$(($i+$sum1))
else
sum2=$(($i+$sum2))
fi
done
echo "偶数和为${sum1},奇数和为${sum2}"
1.2.2 双重循环
echo -n :不换行输出
echo -e :使用转义符
\b ---- 可以理解为使用删除键
\n ---- 换行输出
\t ---- 相当于使用tab键
\c ---- 不换行输出 特点:如果转义符过长会导致后面不会输出
eg:打印九九乘法表
vim 99.sh
for i in {1..9} #看循环次数,i=1到9
do
for ((j=1;j<=i;j++1))
do
echo -ne "$i*$j=$($i*$j")/lt" 表示不换行输出,每循环一次打印一个
done
echo
done
外面的大循环,大循环控制整个循环次数,大循环打印行,内循环控制的是列
1.2.3 循环控制语句
break ---- 一旦触发break,整个循环就会立刻跳出,即使后续还有条件,页不会再去继续执行
continue ---- 触发continue后,只会跳出本次循环,后续的循环可以继续执行;
continue ~ 后面加上数字表示作用到第几层循环
exit ---- 直接退出循环,后续不再执行
vim kongzhi.sh
for i in {1..5}
do
if [ $i -eq 3 ]
then
break
fi
echo $i
done
1.3 while循环
while:当满足条件时,执行循环,不满足条件时结束循环
while用于不知具体循环次数的循环,需要被动结束循环或达到循环条件的场景
1.3.1 格式
while [ 条件语判断 ]
do
命令序列
done
特殊的while循环 ---- 死循环
使用格式:
while true 或 while [ 1 -eq 1 ]
1.3.2 随机数
命令语句: $RANDOM ------------- 生成一个随机数
无任何定义的 $RANDOM 范围:0 ~ 52767
定义范围:
$((RANDOM%100)) ------- 范围:0 ~ 99
$((RANDOM%100+1)) -------- 范围:0 ~ 100
$((RANDOM%1000)) ------- 范围:0 ~ 999
eg:购物环节
淘宝只有一家店,
衣服 500
裤子 400
鞋子 300
帽子 200
袜子 100
每次选购完成之后都要提示用户是否继续购买,如果用户不买了,要提示结算金额,你消费了多少
如果继续买,就继续添加商品,最后也要给一个总金额
1.3.3 until
当判断条件不成立时才进行循环,条件成立终止循环
格式:until [ 条件测试语句 ]
do
命令序列
done
eg:计算1-10求和
vim js.sh
i=0
sum=0
until [ $i -gt 10 ]
do
sum=$(($i+$sum))
let i++
done
echo $sum
2、函数
2.1 什么是函数
将命令序列按照和格式写在一起(在函数中)
函数的核心作用:
重复多次使用命令序列
函数的特点:
使用函数可以避免代码重复
函数可以将大的功能分割成若干个小的功能模块,可以提高代码的可读性
2.2 函数的格式
function 取名 {
echo "函数1"
}
取名
eg:
function ky30 {
read -p "请输入一个数"
a=¥(($a*2))
}
ky30
echo $a
2.3 return和exit
return:
表示退出函数,并返回一个退出值,用$?可以显示退出值(0 / 非0 即 真 / 假)
一般return写在函数定义的最后一行;
退出值的范围:0 ~ 255;如果返回值超过了255,会输出返回值除以256后取余的值
在shell脚本中,return的返回值在不标注的情况下,默认为0或非0
总结:
return 作用在函数内部,在shell中,return一般用来判断函数的执行情况(即成功或是失败)
exit:
作用于整个脚本,立刻终止,并且没有返回码
exit 0 ---- 表示程序正常的退出
exit fei0 ---- 表示程序非正常退出
函数传参
在shell中,调用函数可以传递参数;(使用位置变量来实现传参)
2.4 函数变量的作用范围
函数在shell中,仅仅在当前的shell环境中有效
在函数中定义的变量默认为全局变量,除非添加了local字段后变为内部变量
vim hs.sh
sum1 () {
a=4
b=5
}
a=8
b=9
sum1
echo $a
echo $b
此时还会输出4,5,因为函数内部定义了全局,想打印外面的8,9就得
a=4
b=5
local a=4
local b=5
2.5 递归函数
函数调用自己本身的函数
函数调用自己,打印出自定义目录下所有的命令和文件
2.6 函数库
函数库中包含函数的定义,脚本中包含调用函数的方法,也可以有执行代码
eg:计算器使用函数库来进行调用
vim hanshu.sh
jiafa() {
result=$(($1+$2))
echo $result
}
chengfa() {
result=$(($1*$2))
echo $result
}
保存退出
vim diaoyong.sh
. /opt/hanshu.sh
read -p "输入第一个数字:num1"
read -p "输入第二个数字:num2"
jf=`jiafa $num1 $num2`
cf=`chengfa $num1 $num2`
echo "jf"
echo "cf"
eg:使用函数库建立一个yum源。然后在脚本中安装一个服务nginx