一起来学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⭐️)

博客(阅读体验较佳)

相关推荐
文静小土豆14 分钟前
Rocky Linux 二进制 安装K8S-1.35.0高可用集群
linux·运维·kubernetes
暮云星影38 分钟前
二、linux系统 应用开发:整体Pipeline流程
linux·arm开发
飞Link1 小时前
【Django】Django的静态文件相关配置与操作
后端·python·django
钟离墨笺2 小时前
Go语言--2go基础-->map
开发语言·后端·golang
weixin_430750932 小时前
OpenMediaVault debian Linux安装配置企业私有网盘(三) 静态ip地址配置
linux·服务器·debian·nas·网络存储系统
403240732 小时前
[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南
linux·运维·ubuntu
Tony Bai2 小时前
Go 语言的“魔法”时刻:如何用 -toolexec 实现零侵入式自动插桩?
开发语言·后端·golang
Source.Liu2 小时前
【沟通协作软件】使用 Rufus 制作 Ubuntu 启动盘的详细过程
linux·ubuntu
Love丶伊卡洛斯2 小时前
Ubuntu 部署 STUN服务端
linux·运维·ubuntu
梁洪飞3 小时前
通过链接文件和Start.S学习armv7
linux·arm开发·嵌入式硬件·学习·arm