概述
目录
一、循环结构
1、for循环
格式
循环的使用方法
双重循环 循环嵌套
break
2、while循环
格式
untli循环语句
案例
二、Shell函数
Shell函数的定义
函数返回值
Shell的函数传参
函数变量的作用范围
函数的递归
阶乘
具体操作流程:
定义函数创建库
一、循环结构
1、for循环
格式
for 变量名 in 取值列表
do
命令序列
done
循环的使用方法
也可以通过seq来循环列出数据
将for循环写入脚本;
计算1-10的和
如上的for循环脚本只显示了运行的结果,若是想要显示出循环的过程可以加入一句set -x
的命令
双重循环 循环嵌套
即在一个for循环内部再加上一个for循环
for ((变量=X; 指定变量范围; 指定变量迭代的方式))#定义外循环
do
for ((变量=X; 指定变量范围; 指定变量迭代的方式))#定义内循环
do
命令序列
指定变量迭代的方式
done
命令序列
done
例:
#!/bin/bash
for ((a=1; a<=5; a++))
do
echo "外部循环 $a"
for ((b=1; b<=5; b++))
do
echo " 内部命令 $b"
done
done
exit 用于退出脚本进程
break [n] 用于跳出单(n代表多少层)层循环
continue 用于中止某次循环中的操作,但是不会完全终止整个循环命令
break
使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。
- 跳出当前循环
- 并且break下面的语句不去执行
2、while循环
while就是重复测试某个条件,只药条件成立则反复执行
格式
while 条件测试操作
do
命令序列
done
猜商品价格游戏,通过变量RANDOM获得随机数,提示用户猜测并记录次数,猜中后退出循环
untli循环语句
- 重复测试某个条件,只要条件不成立则反复执行
untli 条件测试
do
命令序列
条件里的变量能够迭代
done
案例
计算1~50之间的和值
二、Shell函数
- 将命令序列按格式写在一起
- 可方便重复使用命令序列
Shell函数的定义
方法一
function 函数名 {
命令序列
return x #也可使用exit来显示函数的结束运行
}
方法二
方法二
函数名 (){
命令序列
}
函数返回值
return
表示退出函数并返回一个退出值,脚本中可以用echo $?
变量显示该值,return 1 退出函数并返回,返回值为1
使用原则:
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255, 超出时值将为除以256取余
#!/bin/bash
function test {
read -p "请输入一个数值:" num
return $[$num * 2]
}
######## main ########
test
echo $?
[root@localhost data]# bash demo1.sh
请输入一个数值:100
200
#最大不能超过255的范围,如果需要则必须调用echo,所以:
test () {
read -p "请输入一个数值:" num
echo $[$num * 2]
}
######## main ########
result=$(test)
echo $result
[root@localhost data]# bash demo1.sh
请输入一个数值:300
600
1.形式
形参:定义一个函数void add(int a, int b),这里的a和b就是形参。
实参:当你进行函数调用的时候,add(1, 2),这里的1和2就是实参
2.使用
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
Shell的函数传参
sum1 () {
sum=$[$1 + $2]
echo $sum
}
######## main ########
read -p "输入第一个参数: " first
read -p "输入第二个参数: " second
result=$(sum1 $first $second)
echo $result
[root@localhost data]# bash demo2.sh
输入第一个参数: 10
输入第二个参数: 20
30
//如果用此方法写函数体外的$1$2与函数体内的$1$2是有区别的
#!/bin/bash
sum1 () {
sum=$[$1 + $2] #而此时的$1与$2对应的是函数体内的$1与$4
echo $sum
}
######## main ########
result=$(sum1 $1 $4 $2]
//此时$1会把10当作函数体内的第一个变量,接着对应着函数体外的$2为函数体内的$4,对应下面数字的10与40
echo $result
[root@localhost data]# bash demo2.sh 10 20 30 40
50
函数变量的作用范围
- 函数在Shell脚本中仅在当前Shell环境中有效(source会影响当前shell的环境)
- Shell脚本中变量默认全局有效
- 将变量限定在函数内部使用local命令(设置为局部变量)
在函数体内设置局部变量
local 变量名=…
#!/bin/bash
myfun() {
echo $i
local i=9 #local命令设置为局部变量仅仅是在函数体内的有效,出了函数就无效了
echo $i
}
i=8
myfun
echo $i
[root@yzy data]# bash demo3.sh
8
9
8
函数的递归
- 函数体内调用自己本身的函数
阶乘
#!/bin/bash
fact() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
######## main ########
read -p "请输入一个要阶乘的数值:" n
result=$(fact $n)
echo "$n的阶乘结果为:$result"
[root@yzy data]# bash demo4.sh
请输入一个要阶乘的数值:5
5的阶乘结果为:120
具体操作流程:
n=5 | fact 5 | |||
---|---|---|---|---|
fact() | $1=5 | temp=5-1=4 | result=$(fact 4) | echo 5 * $(fact 4) |
$1=4 | temp=4-1=3 | result=$(fact 3) | echo 5 * 4 * $(fact 3) | |
$1=3 | temp=3-1=2 | result=$(fact 2) | echo 5 * 4 * 3 * $(fact 2) | |
$1=2 | temp=2-1=1 | result=$(fact 1) | echo 5 * 4 *3 * 2 * $(fact 1) | |
$1=1 | $(fact 1)=1 | echo 5 *4 *3 *2 *1 |
定义函数创建库
vim myfuncs.sh
#加法
jiafa() {
echo $[$1 + $2]
}
#减法
jianfa() {
echo $[$1 - $2]
}
#乘法
chengfa() {
echo $[$1 * $2]
}
#除法
chufa() {
if [ $2 -ne 0 ];then
echo $[$1 / $2]
else
echo "0 不能作为除数"
fi
}
#阶乘
fact() {
if [ $1 -eq 1 ];then
echo 1
elif [ $1 -eq 0 ];then
echo 0
else
local temp=$(jianfa $1 1)
local result=$(fact $temp)
#echo $[$1 * $result]或:
echo $[chengfa $1 $result]
fi
}
//使用如下:
vim test.sh
. myfuncs.sh或source myfuncs.sh
v1=$1
v2=$2
result1=$(jiafa $v1 $v2)
result2=$(jianfa $v1 $v2)
result3=$(chengfa $v1 $v2)
result4=$(chufa $v1 $v2)
result5=$(fact $v1 $v2)
echo "加法结果为: $result1"
echo "减法结果为: $result2"
echo "乘法结果为: $result3"
echo "除法结果为: $result4"
echo "阶乘结果为: $result5"
最后
以上就是体贴板凳为你收集整理的Shell编程之循环语句与函数的使用一、循环结构untli循环语句二、Shell函数的全部内容,希望文章能够帮你解决Shell编程之循环语句与函数的使用一、循环结构untli循环语句二、Shell函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复