• 8、Shell函数



    尚硅谷2022版Linux扩展篇Shell教程-讲师:武晟然

    壁立千仞 无欲则刚

    8、函数

    8.1 系统函数

    函数就是一个缩小版的脚本

    脚本就是复杂化的函数

    系统函数就是linux的Shell中提供直接就可以执行的轻量级脚本

    8.1.1 命令替换

    命令执行后的标准输出放入变量中

    1)基本语法

    新式写法:变量名称=$(命令) #强烈建议采用新式的写法
    旧式写法:变量名称=`命令`
    2)案例实操

    [root@centos7-101 scripts]# A=$(date +%s)
    [root@centos7-101 scripts]# echo $A
    1669884983
    
    • 1
    • 2
    • 3

    8.1.2 basename

    1)基本语法
    basename [string / pathname] [suffix]
    (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

    basename 可以理解为取路径里的文件名称
    选项:
    suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

    2)案例实操
    截取该 add.sh .sh 路径的文件名称。

    [root@centos7-101 scripts]# basename /root/scripts/add.sh .sh
    add
    [root@centos7-101 scripts]# basename /root/scripts/while.sh .sh
    while
    
    • 1
    • 2
    • 3
    • 4

    8.1.3 dirname

    1)基本语法
    dirname 文件绝对路径
    (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

    dirname 可以理解为取文件路径的绝对路径名称,只是对当前字符串做切割。

    2)案例实操

    获取 while.sh 文件的路径。

    [root@centos7-101 scripts]# dirname /root/scripts/while.sh 
    /root/scripts
    
    • 1
    • 2

    获取 while.sh 文件的路径。
    解决相对路径进入无法获取问题

    [root@centos7-101 scripts]# touch dirname.sh
    [root@centos7-101 scripts]# vim dirname.sh 
    #!/bin/bash
    echo '==========dirname========='
    cd $(dirname $0)
    echo "脚本文件的绝对路径:$(pwd)"
    
    [root@centos7-101 scripts]# chmod u+x dirname.sh 
    [root@centos7-101 scripts]# ./dirname.sh 
    ==========dirname=========
    脚本文件的绝对路径:/root/scripts
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    8.2 自定义函数

    1)基本语法

    [ function ] funname[()]
    {
    Action;
    [return int;]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2)经验技巧

    (1)必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译。

    (2)函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)

    3)案例实操
    计算两个输入参数的和。

    [root@centos7-101 scripts]# touch fun.sh
    [root@centos7-101 scripts]# vim fun.sh
    #!/bin/bash
    function add(){
    	sum=$[ $1 + $2 ]
    	echo "$sum"
    }
    read -p "请输入第一个参数" n1
    read -p "请输入第二个参数" n2
    number=$(add $n1 $n2)
    echo "和为:" $number
    echo "平方:" $[ $number * $number ]
    
    [root@centos7-101 scripts]# chmod u+x fun.sh 
    [root@centos7-101 scripts]# ./fun.sh 
    请输入第一个参数1
    请输入第二个参数2
    和为: 3
    平方: 9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    上海物理、化学高考命题趋势及2024年上海物理、化学高考备考建议
    Ubuntu 安装VMware Tools选项显示灰色,如何安装VMware Tools
    Java之~批量压缩文件为InputStream方式上传到云服务
    2 Redis的安装与配置
    掌握电子邮件的未来:深入解析IMAP4的革命性特性与实践
    mysql基于ssm的自习室座位管理系统 毕业设计源码221118
    visual studio 启用DPI识别功能
    香港:考虑将虚拟资产列为投资移民资产
    进程角度和内核角度看进程运行
    codeforces每日5题(均1700)
  • 原文地址:https://blog.csdn.net/zhao854116434/article/details/128125604