一起来学Shell脚本编程(六)

前言

目前正在出一个Shell脚本编程系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

前面我们学习了Linux的一些基本命令,需要我们在终端手动去执行,但在处理一些复杂的操作就显得有点乏力,需要不停的执行,还很容易出错。有没有一种办法,可以帮助我们执行这一些列操作,方法当然有,那就是通过脚本去解决。

作为服务端开发,shell脚本编程还是要掌握一下的,可以做做基础性的运维,提高工作效率。

本系列主要以Linux Bash为主 ,好了, 废话不多说直接开整吧~

函数

本节主要给大家讲讲函数的内容,语法上跟我们熟知的js中的函数类似

shell 复制代码
function f_name () {
    ....
}

function也可以省略掉,通常会这么定义:

shell 复制代码
f_name() {
    ....
}

示例:

bash 复制代码
h(){
	echo 'hello world';
}

h

结果:

shell 复制代码
hello world

调用函数只用方法名,不需要加(),另外函数返回值,可以显式的使用return语句;也可以使用最后一条命令运行结果作为返回值。这里的retrun跟我们熟知的return可不大一样

改写上面的例子:

shell 复制代码
h(){
	return 'hello world';
}

h

运行结果:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./fn.sh
./fn.sh: line 2: return: hello world: numeric argument required
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

可以看到报错了 numeric argument required,意思说只能返回整数, 如果想返回字符串,一般我们都使用echo

函数中的参数

一般通过一下几个特殊变量来接收参数:

  • $# 传递给函数的参数个数。
  • $* 显示所有传递给函数的参数。
  • $@ 与$*相同
  • $? 函数返回值

示例:

bash 复制代码
add() {
    case $# in
      0) 
        echo "no param";;
      1)
        echo "$1";;
      2) 
        echo `expr $1 + $2`;;
      *) 
        echo "";;
    esac
}

add

add 1

add 1 2

add 1 2 3

echo $?

结果:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./fn.sh
no param
1
3

0
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

$?输出了一个0,因为上个函数执行的返回值是一个空串

将返回值赋值给变量

shell 复制代码
add() {
    case $# in
      0) 
        echo "no param";;
      1)
        echo "$1";;
      2) 
        echo `expr $1 + $2`;;
      *) 
        echo "";;
    esac
}

a=$(add 1 2)

echo $a

输出结果:

shell 复制代码
[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./fn.sh
3
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

结束语

大家平时在工作的时候就可以灵活运用起来了,多用用就熟悉了,大部分项目中都会用到脚本帮助我们去做一些自动化的工作,从而提高效率,还不容易出错~

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

Shell脚本编程相关文章

往期Linux相关文章

往期面试题相关文章

项目源码(源码已更新 欢迎star⭐️)

往期设计模式相关文章

设计模式项目源码(源码已更新 欢迎star⭐️)

Kafka 专题学习

项目源码(源码已更新 欢迎star⭐️)

ElasticSearch 专题学习

项目源码(源码已更新 欢迎star⭐️)

往期并发编程内容推荐

推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)

博客(阅读体验较佳)

相关推荐
IUGEI21 分钟前
【后端开发笔记】JVM底层原理-内存结构篇
java·jvm·笔记·后端
wdfk_prog25 分钟前
[Linux]学习笔记系列 -- [kernel]trace
linux·笔记·学习
脏脏a28 分钟前
【Linux】进程深度剖析:从概念到 fork 函数应用
linux·运维·服务器
i***395838 分钟前
Springboot中SLF4J详解
java·spring boot·后端
子洋41 分钟前
群晖 DSM 更新后 Cloudflare DDNS 失效的排查记录
前端·后端·dns
z***94841 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
秃秃秃秃哇1 小时前
C语言实现循环链表demo
linux·c语言·链表
雾岛听风眠1 小时前
串口通信代码的一些解释
linux·运维·服务器
怀旧,1 小时前
【Linux系统编程】8. 进程的概念(下)
linux·运维·服务器
励志成为糕手1 小时前
基于SpringBoot的企业考勤管理系统设计与实现
java·spring boot·后端·web·企业应用