• shell脚本的函数


    一、系统函数

    用户名日志加时间戳

    1. [root@hadoop scripts]# vim cmd_test.sh
    2. #!/bin/bash
    3. filename="$1"_log_$(date +%s)
    4. echo $filenam
    5. [root@hadoop scripts]# chmod +x cmd_test.sh
    6. [root@hadoop scripts]# . cmd_test.sh zhangsan
    7. zhangsan_log_1660710993

    1.basename

    1)基本语法

    basename [string / pathname] [suffix]

    功能描述:basename 命令会删掉所有的前 缀包括最后一个(‘/’)字符,然后将字符串显示出来。 basename 可以理解为取路径里的文件名称

    选项:

    suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的suffix 去掉

    2)案例实操

    字符串剪切

    1. [root@hadoop scripts]# basename /root/scripts/parameter.sh #前面截取
    2. parameter.sh
    3. [root@hadoop scripts]# basename /root/scripts/afdfsg #没有存在文件也可以截取
    4. afdfsg
    5. [root@hadoop scripts]# basename /root/scripts/parameter.sh .sh #前后都截取
    6. parameter

    或者

    1. [root@hadoop scripts]# vim parameter.sh
    2. #!/bin/bash
    3. echo '===============$n================'
    4. echo scripts name:$(basename $0 .sh)
    5. echo 1st parament: $1
    6. echo 2nd parament: $2
    7. echo '===============$#================'
    8. echo parameter numbers: $#
    9. echo '===============$*================'
    10. echo $*
    11. echo '===============$@================'
    12. echo $@
    13. [root@hadoop scripts]# ./parameter.sh a b
    14. ===============$n================
    15. scripts name:parameter
    16. 1st parament: a
    17. 2nd parament: b
    18. ===============$#================
    19. parameter numbers: 2
    20. ===============$*================
    21. a b
    22. ===============$@================
    23. a b

    2.dirname

    1)基本语法

    dirname 文件绝对路径

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

    dirname 可以理解为取文件路径的绝对路径名称

    2)案例实操

    截取路径最后一个/之前的路径

    1. [root@hadoop scripts]# dirname /root/scripts/parameter.sh
    2. /root/scripts
    3. [root@hadoop scripts]# dirname ../scripts/parameter.sh
    4. ../scripts

    或者

    1. [root@hadoop scripts]# vim parameter.sh
    2. [root@hadoop scripts]# cat parameter.sh
    3. #!/bin/bash
    4. echo '===============$n================'
    5. echo scripts name:$(basename $0 .sh)
    6. echo scripts path:$(cd $(dirname $0); pwd) #前后执行命令,
    7. echo 1st parament: $1
    8. echo 2nd parament: $2
    9. echo '===============$#================'
    10. echo parameter numbers: $#
    11. echo '===============$*================'
    12. echo $*
    13. echo '===============$@================'
    14. echo $@
    15. [root@hadoop scripts]# ./parameter.sh a b
    16. ===============$n================
    17. scripts name:parameter
    18. scripts path:/root/scripts
    19. 1st parament: a
    20. 2nd parament: b
    21. ===============$#================
    22. parameter numbers: 2
    23. ===============$*================
    24. a b
    25. ===============$@================
    26. a b

    二、自定义函数

    1)基本语法

    [ function ] funname[()]

    {

            Action;

            [return int;]

    }

    2)经验技巧

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

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

    3)案例实操

    计算两个输入参数的和。

    第一种方法,相加的超过255会报错

    1. [root@hadoop scripts]# vim fun_test.sh
    2. #!/bin/bash
    3. function add(){
    4. s=$[$1 + $2]
    5. echo "和:"$s
    6. }
    7. read -p "请输入第一个整数:" a
    8. read -p "请输入第二个整数:" b
    9. add $a $b
    10. [root@hadoop scripts]# chmod +x fun_test.sh
    11. [root@hadoop scripts]# ./fun_test.sh
    12. 请输入第一个整数:35
    13. 请输入第二个整数:67
    14. 和:102

    第二种方法,相加的超过255不会报错,结果不对

    1. [root@hadoop scripts]# vim fun_test.sh
    2. #!/bin/bash
    3. function add(){
    4. s=$[$1 + $2]
    5. return $s
    6. }
    7. read -p "请输入第一个整数:" a
    8. read -p "请输入第二个整数:" b
    9. add $a $b
    10. echo "和:" $?
    11. [root@hadoop scripts]# ./fun_test.sh
    12. 请输入第一个整数:35
    13. 请输入第二个整数:45
    14. 和: 80
    15. [root@hadoop scripts]# ./fun_test.sh
    16. 请输入第一个整数:156
    17. 请输入第二个整数:237
    18. 和: 137

    第三种,更加完整,还可以求平方

    1. [root@hadoop scripts]# vim fun_test.sh
    2. #!/bin/bash
    3. function add(){
    4. s=$[$1 + $2]
    5. echo $s
    6. }
    7. read -p "请输入第一个整数:" a
    8. read -p "请输入第二个整数:" b
    9. sum=$(add $a $b)
    10. echo "和的"$sum
    11. echo "和的平方:"$[ $sum * $sum]
    12. [root@hadoop scripts]# ./fun_test.sh
    13. 请输入第一个整数:146
    14. 请输入第二个整数:237
    15. 和的383
    16. 和的平方:146689

  • 相关阅读:
    分析级羟甲基壬市场现状及未来发展趋势分析
    rysnc 通过文件输入密码的设置方法
    Car Window Control Reset
    基本知识:block/sleep/hang/宕机/hook/stub/offload/overhead/watermark
    【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏2(附项目源码)
    systemverilog dpi简单使用
    解决 webpack 4.X:autoprefixer 插件使用不起作用的两种解决方案
    Minecraft 1.16.5模组开发(五十四) 方块探测器(Detector)
    7月SCI/SSCI期刊变动,警惕这5本被剔除
    抖店商家体验分怎么提高|成都瀚网科技
  • 原文地址:https://blog.csdn.net/m0_55834564/article/details/126439790