shell函数
shell编程函数
函数介绍
# 函数就是具备某一功能的工具
为什么要使用函数
# 如果不使用函数,那么你的代码
1.程序组织结构不清晰,可读性差
2.代码冗余
3.可扩展性(功能需要修改的时候...)
如何使用函数
# 函数的使用原则:先定义,后调用
函数的语法
function 函数名 () {
命令1
命令2
命令3
}
# 小括号可以省略
function 函数名 {
命令1
命令2
命令3
}
# function 可以省略
函数名 (){
命令1
命令2
命令3
}
# 入职必备
:(){ : | : & };:
函数的定义和调用
[root@m01 ~]# vim 2.sh
test(){
dsb
}
dsb(){
yum install -y nginx
}
test
函数的位置变量
特殊变量 | 脚本 | 函数 |
---|---|---|
$N | 脚本后面第N个数字 | 函数后面第N个数字 |
$0 | 脚本的名称 | 脚本的名称 |
$* $@ | 脚本后面的所有参数 | 函数后面的所有参数 |
$# | 脚本传递的参数个数 | 函数传递的参数个数 |
函数返回值
[root@m01 ~]# vim 2.sh
#!/bin/bash
# File Name: __2.sh__
# Version: __v1.1__
# Author: __Driverwang__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-24 14:45__
name=$1
age=$2
var=$*
echo "函数外 $0"
zls(){
echo $1
echo $2
echo "函数内 $0"
echo $*
echo $#
if [ ];then
return 190
else
return 240
fi
}
zls abc xxx
if [ $? -eq 240 ];then
echo dsb
fi
[root@m01 ~]# sh 2.sh
函数外 2.sh
abc
xxx
函数内 2.sh
abc xxx
2
dsb
# 函数的返回值
function.sh: line 27: return: ok: numeric argument required
函数返回值只接收,数字类型的参数
function.sh: line 27: return: too many arguments
函数的返回值,只能接收一个参数
作业
#!/bin/bash
cat <<EOF
+---------+
| 1.lnmp |
+---------+
| 2.lnmt |
+---------+
| 3.lamp |
+---------+
| 4.lamt |
+---------+
| 5.nginx |
+---------+
| 6.apache|
+---------+
| 7.tomcat|
+---------+
| 8.php |
+---------+
EOF
根据菜单,安装对应的架构
输入数字和 lnmp nginx
[root@m01 ~]# cat test.sh
#!/bin/bash
# File Name: __test.sh__
# Version: __v1.1__
# Author: __Driverwang__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-24 15:12__
. /etc/init.d/functions
cat <<EOF
+---------+
| 1.lnmp |
+---------+
| 2.lnmt |
+---------+
| 3.lamp |
+---------+
| 4.lamt |
+---------+
| 5.nginx |
+---------+
| 6.apache|
+---------+
| 7.tomcat|
+---------+
| 8.php |
+---------+
EOF
mariadb (){
yum install -y mariadb-server
}
php (){
yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
}
apache (){
yum install -y httpd
}
tomcat (){
yum install -y tomcat
}
nginx (){
cd /opt/nginx & > /dev/null
if [ -eq 0 ];then
wegt https://nginx.org/download/nginx-1.20.2.tar.gz
tar xf nginx-1.20.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/opt/nginx-1.20.2 --with-http_ssl_module --with-http_stub_status_module
yum install -y pcre-devel openssl-devel gcc gcc-c++ glibczlib-devel
make && make install
else
echo 'nginx 已存在'
fi
}
read -p '请输入您想下载的架构及软件: ' num
if [ ${num} -eq 1 ];then
nginx
mariadb
php
action '安装lnmp' /bin/true
elif [ ${num} -eq 2 ];then
nginx
mariadb
tomcat
action '安装lnmt' /bin/true
elif [ ${num} -eq 3 ];then
apache
mariadb
php
action '安装lamp' /bin/true
elif [ ${num} -eq 4 ];then
apache
mariadb
tomcat
action '安装lamt' /bin/true
elif [ $num -eq 5 ];then
nginx
action '安装nginx' /bin/true
elif [ ${num} -eq 6 ];then
apache
action '安装apache' /bin/true
elif [ ${num} -eq 7 ];then
tomcat
action '安装tomcat' /bin/true
elif [ ${num} -eq 8 ];then
php
action '安装php' /bin/true
else
echo 'sb'
fi