shell函数的定义

shell函数的定义

​ 定义:将命令序列按照格式写在一起.格式指的是函数的固定格式

​ 作用:方便重复使用,还可以做成函数库,集中在一起,随时可以传参调用,大的工程分割成小的模块,提高代码的可读性.

函数的格式

vim hanshu1.sh
 function shopping {
  命令序列
 
 }
 
 shopping () {
  命令序列
 
 }

示例

function abc {
 read -p "输入一个数" num
 a=$(($num*2))
 echo $a
}
abc

:wq

函数返回值

return的作用

只能写在函数的内部,目的是从函数的内部获取一个返回值,用来判断是否继续执行下一个脚本.

在使用return $?传返回码的时候,默认0是成功,非0都是失败,返回码可以自定义,范围是0-255之间,超过了就会大数字/255,取余

function abc {
 read -p "输入一个数" num
 a=$(($num*2))
 return $a		#return改变了$?的状态码性质,不再代表成功或失败,只代表返回的数字
}
abc
echo $?
:wq

函数的传参方式以及函数变量的作用范围

脚本内部传参
sum () {
 num=$(($1+$2))
 echo $num
}
read -p "第一个数字" num1
read -p "第一个数字" num2
sum $num1 $num2
脚本外部
vim chuancan.sh
sum () {
 num=$(($1+$2))
 echo $num
}
sum $1 $2
:wq

bash chuancan.sh 1 2
abc (){
 a=5
 b=6
}
a=8
b=9
abc
echo $a
echo $b
在函数内部定义了全局变量,外部的赋值是不能改变内部函数的全局变量的

[[ $num =~ ^-?[0-9]+$ ]]

abc (){
 local a=5
 local b=6
 c=10
}
a=8
b=9
abc
echo $a
echo $b
echo $c
在加了local之后,就是函数内部的变来那个,而不再是全局变来那个,外部的赋值会替换内部的变量


abc (){
 echo "inside1 $a " 
 let a++
 local a
 echo "inside3 $a"
 a=8
 echo "inside2 $a"
}
a=9
abc
echo "outside $a"

函数递归

函数调用自己本身的函数

阶乘举例

4的阶乘 4*3*2*1=24
vim jc.sh
 jiecheng (){
  if [[ $1 -eq 1 ]]
  then
   echo 1
  else
   local temp=$(($1-1))
   local result=$(jiecheng $temp)
   echo "$(($1*$result))"
   fi
 }
 read -p "输入一个数字" num
 result1=`jiecheng $num`
 echo $result1

函数库

函数库中,只包含定义的函数,由另外一个脚本传入参数来调用我们定义的函数

vim jisuanhanshuku.sh
jiafa() {
 result=$( echo "  $1+$2 " | bc )
 echo $result
}

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

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

练习1

递归目录.把/etc/目录下,所有文件递归出来

如果只是目录,且该目录下没有文件,就打印目录,否则继续打印,直到目录里面没有文件为止

mulu () {
 for file in `ls $1`
 do
  if [[ -d "$1/$file" ]]
  then
   echo $file
   mulu "$1/$file"
  else
   echo "这是个文件,直接打印"
   echo "$file"
  fi
done
}
mulu $1

练习2

把后缀名是.txt的文件复制到/opt/dec当中

 mulu () {
 for file in `ls $1`
 do
  if [[ -d "$1/$file" ]]
  then
   echo $file
   mulu "$1/$file"
  else
   echo "这是个文件,直接打印" "$file"
   if [[ "$file" == *.txt ]]
   then
    cp $file /opt/dec/
   fi
  fi
done
}
mulu $1

练习3

函数库加减乘除,要求小数和整数都可以运算,小数点后两位

vim jisuanhanshuku.sh
jiafa() {
 result=$( echo " scale=2; $1+$2 " | bc )
 echo $result
}

jianfa() {
 result=$( echo " scale=2; $1-$2 " | bc )
 echo $result
}

chengfa() {
 result=$( echo " scale=2; $1*$2 " | bc)
 echo $result
}
chufa(){
 result=$( echo " scale=2; $1/$2 " | bc)
 echo $result
}

vim jisuan.sh
. /root/jisuanhanshuku.sh
read -p "请输入第一个数" num1
read -p "请输入第二个数" num2
sum=`jiafa $num1 $num2`
sub=`jianfa $num1 $num2`
mult=`chengfa $num1 $num2`

echo $sum
echo $sub
echo $mult

相关推荐

  1. shell函数定义

    2024-06-19 06:58:02       7 阅读
  2. 20.Linux Shell定义函数

    2024-06-19 06:58:02       36 阅读
  3. 定义shell工具函数之pull_image()

    2024-06-19 06:58:02       30 阅读
  4. shell_80.Linux函数递归

    2024-06-19 06:58:02       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-19 06:58:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-19 06:58:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-19 06:58:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-19 06:58:02       20 阅读

热门阅读

  1. Redis 面试热点(一)

    2024-06-19 06:58:02       8 阅读
  2. GPRS与4G网络:技术差异与应用选择

    2024-06-19 06:58:02       6 阅读
  3. 百度翻译注册流程

    2024-06-19 06:58:02       8 阅读
  4. 136.只出现一次的数字

    2024-06-19 06:58:02       8 阅读
  5. QT

    QT

    2024-06-19 06:58:02      7 阅读
  6. clangd报错 “stddef.h not found“

    2024-06-19 06:58:02       8 阅读