shell编程之循环语句与函数

文章目录

  • 一.shell函数
    • 1.作用
    • 2.使用函数的优势
    • 3.shell函数定义
      • 3.1方式1:
      • 3.2方式2:
    • 4.调用函数的方法
    • 5.函数返回值
      • 5.1 return
      • 5.2 exit
    • 6.1-100奇偶求和相加
  • 二.函数传参
    • 1.含义
    • 2.函数传参的方式
  • 三.函数变量的作用范围
    • 1.函数变量的作用范围
    • 2.调用函数
      • 2.1示例:
    • 3.递归
      • 3.1含义
      • 3.2递归示例
    • 4.阶乘
      • 4.1阶乘的含义
      • 4.2阶乘示例
    • 5.函数库
    • 6.拓展

一.shell函数

1.作用

(1)将命令序列按格式写在一起

(2)可方便重复使用命令序列

2.使用函数的优势

(1)使用函数可以避免代码冲突

(2)将大的工程可以分割为若干小的功能模块,代码的可读性更强

3.shell函数定义

3.1方式1:

[function] 函数名 () {

命令系列

[return x]————————使用return或exit可以显示地结束函数

}

3.2方式2:

函数名 () {

命令系列

}

4.调用函数的方法

函数名 [参数1] [参数2]

5.函数返回值

5.1 return

退出函数并返回一个退出值,作用于函数内部,函数返回值的范围:0~255之间(0就是成功,只要返回值非0也都认为失败,在shell中的返回码可以自定义,因此可以让成功也可以让失败。

function abc {

read -p "输入一个数字:" a
a=$(($a*2))
return 0
}
abc————————————————必须加函数名,用来调用
echo $a

在这里插入图片描述

5.2 exit

终止函数运行,exit0,函数执行exit语句,整个脚本将立刻停止,并把指定的退出状态码返回给调用者。

function abc {

read -p "输入一个数字:" a
a=$(($a*2))
exit 0
}
abc
echo $a

在这里插入图片描述

6.1-100奇偶求和相加

第一种:

oushu () {
sum1=0
for i in `seq 2 2 100`
 do
 sum1=$(($i+$sum1))
done
}
oushu
 echo $sum1
jishu () {
sum2=0
for o in `seq 1 2 100`
 do
 sum2=$(($o+$sum2))
done
}
jishu
 echo $sum2
total=$(($sum1+$sum2))
echo $total 

shell编程之循环语句与函数_第1张图片

第二种:

jishu () {
sum1=0
for ((i=1;i<=100;i+=2))
do
sum1=$(($sum1+$i))
done
}
jishu
echo $sum1

oushu () {
sum2=0
for ((j=2;j<=100;j+=2))
do
sum2=$(($sum2+$j))
done
}
oushu
echo $sum2

total=$(($sum1+$sum2))
echo $total

在这里插入图片描述

二.函数传参

1.含义

在shell中,调用函数时可以向其传递参数

在函数体内部,通过$n的形式来获取参数的值

2.函数传参的方式

方式一:

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

read -p "请输入第一个数:" first
read -p "请输入第二个数:" second
sum1 $first $second

[root@test1 opt]# chmod 777 cc.sh

[root@test1 opt]# ./cc.sh

shell编程之循环语句与函数_第2张图片

方式二:

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

在这里插入图片描述

三.函数变量的作用范围

1.函数变量的作用范围

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

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

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

2.调用函数

加了local只能在函数内部生效,如果函数外重新定义,值会被更改,

调用函数:第一步内部没定义传外部的9,第二步内部重新定义全局变量为8不受外部影响,第三步第一次已经传参进去打印。

2.1示例:

bash -x + 脚本名称 ——查看详细过程

shell编程之循环语句与函数_第3张图片
在这里插入图片描述

abc () {
echo "inside $i"————————————#定义了外部9
let i++
local i
i=8
echo "inside $i"

}
i=9
abc
echo "outside $i"

shell编程之循环语句与函数_第4张图片

3.递归

3.1含义

函数调用自己本身的函数

3.2递归示例

/etc,展示/etc 目录下的所有内容

mulu () {
for i in `ls $1`
do
 if [ -d "$1/$i" ] #是否为目录
  then
   echo "$1$i"
   muli "$1/$i"#不是目录的话要打印文件,调用查看目录下是否还有东西
 else
  echo "$i"  #$2 为空,不传参,只输入文件名
fi
done
}
mulu $1

shell编程之循环语句与函数_第5张图片

shell编程之循环语句与函数_第6张图片

4.阶乘

4.1阶乘的含义

阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。

例如所要求的数是4。则阶乘式是1x2x3x4,得到的积是24,24就是4的阶乘。 例如所要求的数是6.则阶乘式足1x2x3*…6,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是1x2x3*…*n,设得到的积是x,x就是n的阶难。

总:输入一个数一直乘到自己,1不算,每一次自己减一再作为参数乘以自己到1不乘。

4.2阶乘示例

jiecheng () {
if [ $1 -eq 1 ]
 then
  echo 1
else
 local number=$(($1-1))
 local result=$(jiecheng $number) #自己乘自己每次的
结果减1
 echo "$(($1*$result))"
fi
}
read -p "输入一个数求阶乘: " num
result=`jiecheng $num`
echo $result

shell编程之循环语句与函数_第7张图片

5.函数库

vim hsk.sh
jiafa () {
result=$(($1+$2))
echo $result
}

jianfa () {
result=$(($1-$2))
echo $result
}

chengfa () {
result=$(($1*$2))
echo $result
}

chufa () {
if [ $2 -ne 0 ]
 then
result=$(($1/$2))
echo $result

else
 echo "$2不能是0!"
fi

调用数据库

vim dy.sh
. /opt/hsk.sh
read -p "请输入第一个数:" first
read -p "请输入第二个数:" second
a=`jiafa $first $second`
b=`jianfa $first $second`
c=`chengfa $first $second`
d=`chufa $first $second`

echo $a
echo $b
echo $c
echo $d

shell编程之循环语句与函数_第8张图片

6.拓展

函数能够接受一个参数,参数为用户名; 判断一个用户是否存在 如果存在,就返回此用户的shell 和 UID ;并返回正常状态值; 如果不存在,就说此用户不存在;并返回错误状态值。
shell编程之循环语句与函数_第9张图片
shell编程之循环语句与函数_第10张图片

shell编程之循环语句与函数_第11张图片

在这里插入图片描述

你可能感兴趣的:(linux,运维,服务器)