shell函数

shell函数

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

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

函数的格式:

#第一种函数格式
function shoping{
	命令序列

}
#第二种函数格式
shoping () {
	命令序列

}
#传参
function abc{
	num=$(($a*2))
	echo $num
}
a=10
abc

function abc{
	read -p "输入一个数:" a
	num=$(($a*2))
	echo $num
}
function abc {
        read -p "输入一个数:" num
        if [ $num -eq $num ] &> /dev/null
        then
        num=$(($num*2))
        return 0
        else
         echo "输入错误"
        return 1
        fi

}
abc
if [ $? -eq 0 ]
then
echo 1
else
exit
fi

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

echo $? 这个时候不再是判断执行结果,只是一个函数内部返回值,在使用return传返回码的时候,默认0是成功,非0都是失败。

返回码可以自定义,但是是有范围的,0~255

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

sum () {
	num=$(($1+$2))
	echo $num
}
sum
read -p "1的数" num1
read -p “2的数” num2
sum $num1 $num2

sum () {
	num=$(($1+$2))
	echo $num
}
a=1
b=2
sum
sum $a $b

sum () {
	num=$(($1+$2))
	echo $num
}
sum
sum $1 $2
sh sum.sh 10 20
#在外面调用传参
abc () {
	a=5
	b=6
}
a=8
b=9
abc
echo $a $b

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

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

在这里插入图片描述

函数递归:函数调用自己本身的函数

#用函数递归的方式来实现阶乘
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"
#递归目录。把/opt日录下,所有的文件递归出来,如果只是目录且该目录下没有文件就打印目录。否则继续
#打印,直到目录里面没有文件为止
digui () {
        for file in `ls $1`
        do
         if [ -d "$1/$file" ]
         then
          echo $file
          digui "$1/$file"
          else
           echo "$file"
         fi
        done
}
digui $1

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

jiafa () {
	result=$(($1+$2))
	echo $result
}
jianfa () {
	result=$(($1-$2))
	echo $result
}
chengfa () {
	result=$(($1*$2))
	echo $result
}

. /opt/hanshu/hanshu8.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

练习

#小数和整数都可以运算?小数点后两位
vim hanshu8.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
}
vim diaoyong.sh
. /opt/hanshu/hanshu8.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
#所有文件,把后缀名是.txt的分件复制到/opt/dec当中。
digui () {
        for file in `ls $1`
        do
         if [ -d "$1/$file" ]
         then
          echo $file
          digui "$1/$file"
          elif [ -f "$file" ]; then
            if [[ "$file" == *.txt ]];then
                cp "$file" /opt/dec
          else
           echo "$file"
            fi
         fi
        done
}
digui $1

相关推荐

  1. shell 函数与数组

    2024-06-18 15:36:07       33 阅读
  2. Linux Shell 函数详解

    2024-06-18 15:36:07       20 阅读
  3. shell函数的定义

    2024-06-18 15:36:07       7 阅读

最近更新

  1. TCP协议是安全的吗?

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

    2024-06-18 15:36:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

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

    2024-06-18 15:36:07       20 阅读

热门阅读

  1. vue2中实现记住密码功能

    2024-06-18 15:36:07       7 阅读
  2. 基于Python引擎的PP-OCR模型库推理

    2024-06-18 15:36:07       5 阅读
  3. 运维开发详解:从入门到精通

    2024-06-18 15:36:07       6 阅读
  4. Android使用data uri启动activity或service

    2024-06-18 15:36:07       4 阅读
  5. 【Sa-Token|2】Sa-Token在微服务中的使用

    2024-06-18 15:36:07       6 阅读
  6. 使用爬虫爬取豆瓣电影Top250(方法一)

    2024-06-18 15:36:07       10 阅读
  7. Protobuf详解及入门指南

    2024-06-18 15:36:07       8 阅读
  8. Android的布局有哪些?

    2024-06-18 15:36:07       6 阅读
  9. MySQL触发器基本结构

    2024-06-18 15:36:07       6 阅读
  10. 大文件上传实现

    2024-06-18 15:36:07       5 阅读
  11. 前端BUG记录-a-spin和a-pagination

    2024-06-18 15:36:07       8 阅读
  12. 探索 HNSW:分层导航小世界算法的深度解析

    2024-06-18 15:36:07       5 阅读
  13. 正则表达式 - 在线工具

    2024-06-18 15:36:07       6 阅读