shell脚本编程-函数

简介: shell脚本编程-函数

函数的定义和使用

如何调用函数

  • 直接使用函数名调用,可以将其想象成Shell中的一条命令
  • 函数内部可以直接使用参数 $1$2...$n
  • 调用函数: function_name $1 $2

创建函数

#第一种格式
name()
{
        command1
        command2
        ......
}
#第二种格式
function name
{
        command1
        command2
        ......
}

练习

需求描述:写一个监控nginx的脚本;如果Nginx服务宕掉,则脚本可以检测到并将进程启动

#!/bin/bash
#
nginx_pip=$$
ps -ef | grep nginx | grep -v grep | grep -v $nginx_pip &> /dev/null
if [ $? -eq 0 ]
then
        echo "nginx running"
else
        systemctl start nginx
        echo "start nginx"
fi

向函数传递参数

函数传参和脚本传参类似,都是使用 $1 $2 $3 $4 $5这种方式

function name
{
        echo "Hello $1"
        echo "Hello $2"
}
# 函数调用,Lily 和 Allen 分别对应 $1 和 $2
name Lily Allen

练习

写一个脚本,该脚本可以实现计算器的功能,可以进行+-*/四种运算

例如: sh calculate.sh30+40sh calculate.sh30-40

function calculate
{
        case "$2" in
                +)
                        echo "`expr $1 + $3`"
                        ;;
                -)
                        echo "`expr $1 - $3`"
                        ;;
                \*)
                        echo "`expr $1 \* $3`"
                        ;;
                /)
                        echo "`expr $1 / $3`"
                        ;;
            esac
}
calculate $1 $2 $3

函数的返回值


方法一 return
方法二 echo

方法一 return

+ 使用return返回值,只能返回1-255的整数
+ 函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常仅返回0或1;0表示成功,1表示失败

方法二 echo

+ 使用echo可以返回任何字符串结果
+ 通常用于返回数据,比如一个字符串值或者列表值

全局变量

+ 不做特殊声明,shell中变量都是全局变量
+ Tips:大型脚本程序中函数中慎用全局变量

局部变量

+ 定义变量时,使用local关键字
+ 函数内和外若存在同名变量,则函数内变量覆盖外部变量

函数库

在脚本中引用自己写的脚本

1. #引用当前目录下的其他脚本,也可以使用绝对路径
2. . test.sh

注意事项

  1. 库文件的后缀是任意的,但一般使用 .lib
  2. 库文件通常没有可执行的权限
  3. 库文件无需和脚本在同级目录,只需在脚本中引用时指定
  4. 第一行一般使用 #!/bin/echo,输出警告信息,避免用户执行
目录
相关文章
|
24天前
|
弹性计算 Shell Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
106 1
|
27天前
|
Java Shell
SpringBoot启动脚本Shell
SpringBoot启动脚本Shell
17 0
|
4天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
29 3
|
1天前
|
监控 Shell 应用服务中间件
第十二章 Shell脚本编写及常见面试题(二)
第十二章 Shell脚本编写及常见面试题(二)
|
1天前
|
监控 关系型数据库 Shell
第十二章 Shell脚本编写及常见面试题(一)
第十二章 Shell脚本编写及常见面试题(一)
|
1天前
|
监控 Shell
生产环境Shell脚本Ping监控主机是否存活(多种方法)
生产环境Shell脚本Ping监控主机是否存活(多种方法)
|
1天前
|
运维 Shell
Shell脚本判断IP是否合法性(多种方法)
Shell脚本判断IP是否合法性(多种方法)
|
8天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
31 0
|
8天前
|
监控 Shell 开发工具
Shell编程
Shell编程
|
8天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句