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

博客(阅读体验较佳)

相关推荐
千叶寻-36 分钟前
正则表达式
前端·javascript·后端·架构·正则表达式·node.js
小咕聊编程2 小时前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
IT成长日记5 小时前
【Nginx开荒攻略】Nginx虚拟主机配置:从域名、端口到IP的完整指南
linux·运维·服务器·nginx·虚拟主机
迎風吹頭髮7 小时前
Linux内核架构浅谈8-Linux内核与UNIX的传承:设计思想与特性差异
linux·运维·架构
黑马金牌编程7 小时前
Linux 服务器常见的性能调优
linux·运维·服务器·性能优化
jieyu11197 小时前
网络、主机安全扫描工具
linux·安全·系统安全
tianyuanwo7 小时前
Linux进程管理中的T状态问题分析与解决体系
linux·运维·进程管理·t状态
追逐时光者8 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_8 小时前
敏捷开发流程-精简版
前端·后端
liuyao_xianhui8 小时前
Linux_基本指令1
linux·运维·服务器