[root@CentOS83 ~]# vim fun.sh
[root@CentOS83 ~]# cat fun.sh !/bin/bash
function fun_1 { #定义函数
echo "this is function"
}
fun1 #调用函数
注意:函数名的使用,如果在一个脚本中定义了重复的函数名,那么以最后一个为准
[root@CentOS83 ~]# vim fun1.sh
[root@CentOS83 ~]# cat fun1.sh !/bin/bash
function fun1 {
echo "this is function"
}
function fun1 {
echo "this is 123123"
}
fun1
[root@CentOS83 ~]# bash fun1.sh #测试
this is 123123
22.3.3 返回值 使用 return 命令来退出函数并返回特定的退出码
[root@CentOS83 ~]# vim fun2.sh
[root@CentOS83 ~]# cat fun2.sh !/bin/bash
function fun1 {
echo "this is function"
ls /etc/passwd
return 3
echo "我不会执行"
}
fun1
[root@CentOS83 ~]# bash fun2.sh #测试
this is function
/etc/passwd
[root@CentOS83 ~]# echo $?
3
[root@CentOS83 ~]# vim fun3.sh
[root@CentOS83 ~]# cat fun3.sh !/bin/bash
fun1(){
read -p "input a number:" va
echo $[$va5]
}
num=$(fun1)
echo current num is $num
[root@CentOS83 ~]# bash fun3.sh #测试
input a number:23
current num is 115
22.3.5 函数的参数传递
第一种:通过脚本传递参数给函数中的位置参数$1
[root@CentOS83 ~]# vim fun4.sh
[root@CentOS83 ~]# cat fun4.sh !/bin/bash
fun1(){
ls $1
}
fun1 $1
[root@CentOS83 ~]# bash fun4.sh #测试
!/bin/bash
fun1() {
ls $1
}
fun1 #这里如果不写$1 ,函数获取不到$1 的值
[root@CentOS83 ~]# vim fun7.sh
[root@CentOS83 ~]# cat fun7.sh !/bin/bash
function fun {
num=$[var5]
}
read -p "input a number:" var
fun
echo the new value is: $num
[root@CentOS83 ~]# bash fun7.sh #测试
input a number:5
the new value is: 25
2、局部变量
不能被引用到函数外
定义方法:local value
[root@CentOS83 ~]# vim fun8.sh
[root@CentOS83 ~]# cat fun8.sh
#!/bin/bash
function fun(){
local temp=$[ $value + 5 ] # 定义 temp 为局部变量,只在函数内生效
echo "local temp is $temp"
result=$[ $temp *2 ]
}
temp=4 # 这两个变量是全局变量
value=6
fun
echo "The result is $result"
if [ $temp -gt $value ];then # 此处的 temp 变量是 temp=4 这个全局变量,并不是 fun 中的局部变量
echo "temp 大于 value,temp 的值是$temp"
else
echo "temp 不大于 value,temp 的值是$temp"
fi
[root@CentOS83 ~]# bash fun8.sh
local temp is 11
The result is 22
temp 不大于 value,temp 的值是4
22.4 实战自动备份 mysql 数据库脚本和 nginx 服务启动脚本 22.4.1 自动备份 mysql 数据库脚本
从 centos7.0 开始,系统中自带的 mysql 数据库包,改为 mariadb 数据库。
MariaDB 数据库概述:MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可 MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为MySQL 的代替品。MariaDB 由 MySQL 的创始人 Michael Widenius(迈克尔·维德纽斯)主导开发,他早前曾以 10 亿美元的价格,将自己创建的公司 MySQL AB 卖给了 SUN,此后,随着 SUN 被甲骨文收购,MySQL 的所有权也落入 Oracle 的手中。
MariaDB 名称来自 Michael Widenius 的女儿
Maria(玛丽亚)的名字。
甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 过去一年中,大型互联网用户以及 Linux 发行商纷纷抛弃 MySQL,转投 MariaDB 阵营。
MariaDB 是目前最受关注的 MySQL 数据库衍生版,也被视为开源数据库 MySQL 的替代品。 安装 mariadb 数据库:
[root@CentOS83 ~]# chmod +x /etc/init.d/nginx
[root@CentOS83 ~]# chkconfig --add /etc/init.d/nginx
[root@CentOS83 ~]# chkconfig nginx on
[root@CentOS83 ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
jexec 0:off 1:on 2:on 3:on 4:on 5:on 6:off
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@CentOS83 ~]# systemctl status nginx
● nginx.service - SYSV: nginx run
Loaded: loaded (/etc/rc.d/init.d/nginx; generated)
Active: inactive (dead)
Docs: man:systemd-sysv-generator(8)
[root@CentOS83 ~]# systemctl start nginx
[root@CentOS83 ~]# systemctl status nginx