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

博客(阅读体验较佳)

相关推荐
幺零九零零9 分钟前
Golang-Swagger
开发语言·后端·golang
moyueheng33 分钟前
AG-UI 事件类型全解析:构建 AI 代理与 UI 的实时通信桥梁
后端
兔丝35 分钟前
ThinkPHP8 常见并发场景解决方案文档
redis·后端
用户35218024547535 分钟前
🥯2025 年终极避坑指南:Spring Boot 2.7 + 3.2 混合集群的 Redis + OAuth2 序列化血泪史
java·后端·spring cloud
AI+程序员在路上42 分钟前
网桥及IP转发在嵌入式linux eth0与wlan0连接使用方法
linux·tcp/ip·php
superman超哥42 分钟前
Rust 闭包的定义与捕获:所有权系统下的函数式编程
开发语言·后端·rust·函数式编程·rust闭包·闭包的定义与捕获
落枫591 小时前
如何快速搭建一个JAVA持续交付环境
后端·github
用户8356290780511 小时前
如何将 Python 列表高效导出为 Excel 文件
后端·python
止水编程 water_proof1 小时前
SpringBoot快速上手
java·spring boot·后端
I · T · LUCKYBOOM1 小时前
1.Apache网站优化
linux·运维·服务器·网络·apache