shell编程-函数
函数介绍
什么是函数
函数就是具备某一功能的工具
为什么要使用函数
如果不使用函数,那么你的代码:
1.程序的组织结构不清晰,可读性差
2.代码冗余
3.可扩展性(功能需要修改的时候...对不起GG)
如何使用函数
函数的使用必须遵循的原则:先定义,后调用
修理工事先准备好工具的过程,即,定义函数
修理工遇到应用场景哪来工具就用即函数的调用
1.先定义
2.后调用
函数的语法
函数定义语法
# 方式1
function 函数名(){
功能 (就是动作)
}
# 方式2
function 函数名{
命令1
命令2
命令3
}
# 方式3
函数名(){
命令1
命令2
命令3
}
# 有害代码解析
:(){ : | : & };:
:(){
: | : &
};:
函数的调用
直接用函数名就行了
#!/bin/bash
# 定义函数
xxx(){
echo 123
}
#调用函数
xxx
# 执行结果
[root@web02 test]# sh function.sh
123
# 可以嵌套函数
#!/bin/bash
# 函数xxx去调用函数yyy,由yyy去执行echo 123的命令
xxx(){
yyy
}
yyy(){
echo 123
}
# 调用函数 xxx,直接调用yyy也可以
xxx
练习
# 1
[root@web02 test]# cat function.sh
#!/bin/bash
name=$1
xxx(){
echo $name
echo $1
}
echo $1
xxx abc
[root@web02 test]# sh function.sh uuu
uuu (#函数外echo $1的结果)
uuu (#函数xxx中的 echo $name的结果)
abc (#函数xxx中的 echo $1的结果)
# 2
[root@web02 test]# cat function.sh
#!/bin/bash
name=$1
xxx(){
echo $name
echo $1
}
#echo $1
xxx abc
[root@web02 test]# sh function.sh uuu
uuu
abc
函数传参语法
function foo() {
args=$1
命令1
命令2
命令3
}
函数参数 VS 脚本参数
特殊变量 | 脚本 | 函数 |
---|---|---|
$N | 脚本的第N个参数 | 函数的第N个参数 |
$0 | 脚本名称 | 脚本名称 |
$*/$@ | 脚本的所有参数 | 函数的所有参数 |
$# | 脚本传递的参数个数 | 函数传递的参数个数 |
函数的返回值
1.函数返回值,必须是numeric,数字(整型)
2.返回值有个数限制,只能写一个返回值
返回值的作用很重要,方便我们后续的判断,包括变量的传递,在这里说可能体现不出来,后续我们写脚本的时候用到,就明白了。
拓展
# 当型循环
while 当什么情况发生的时候
当什么模式,后面[ 条件 ]
只要条件满足成立时我就循环
循环到这个条件不满足
# 直到型循环
do_until # 很少 压根不用
后面接条件表达式
这个条件只要不满足就一直循环
循环到满足为止
# 通用型循环
for #最常用的
基本while能做的for也能做
死循环做不了
# 死循环
#!/bin/bash
while true;do
echo '111'
sleep 2
done
#!/bin/bash
while [ 1 -eq 1 ];do
echo '111'
sleep 2
done
作业
根据菜单 安装对应架构
输入数字和服务名安装对应服务
+-------------+
| 1.nginx |
+-------------+
| 2.apache |
+-------------+
| 3.mariadb |
+-------------+
| 4.rsync |
+-------------+
| 5.php |
+-------------+
| 6.nfs |
+-------------+
| 7.java |
+-------------+
| 8.redis |
+-------------+
| 9.tomcat |
+-------------+
# 优化前
#!/bin/bash
cat fuwu.txt
read -p "请输入需要下载的服务:" fw
if [ "$fw" == "1" ] || [ "$fw" == "nginx" ];then
yum install -y $fw &>/dev/null
num=`rpm -qa |grep -c nginx`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "2" ] || [ "$fw" == "apache" ];then
yum install -y httpd &>/dev/null
num=`rpm -qa |grep -c httpd`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "3" ] || [ "$fw" == "mariadb" ];then
yum install -y mariadb-server &>/dev/null
num=`rpm -qa |grep -c mariadb-server`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "4" ] || [ "$fw" == "rsync" ];then
yum install -y $fw &>/dev/null
num=`rpm -qa |grep -c rsync`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "5" ] || [ "$fw" == "php" ];then
yum install -y php-fpm &>/dev/null
num=`rpm -qa |grep -c php-fpm`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "6" ] || [ "$fw" == "nfs" ];then
yum install -y nfs-utils &>/dev/null
num=`rpm -qa |grep -c nfs-utils`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "7" ] || [ "$fw" == "java" ];then
yum install -y $fw &>/dev/null
num=`rpm -qa |grep -c java`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "8" ] || [ "$fw" == "redis" ];then
yum install -y $fw &>/dev/null
num=`rpm -qa |grep -c redis`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
elif [ "$fw" == "9" ] || [ "$fw" == "tomcat" ];then
yum install -y tomcat tomcat-webapps tomcat-admin-webapps &>/dev/null
num=`rpm -qa |grep -c tomcat`
if [ $num -gt 0 ];then
echo '安装成功'
else
echo '安装失败'
fi
else
echo "你输入的是不是表里的东西啊!"
exit
fi
# 优化后
#!/bin/bash
cat fuwu.txt
read -p "请输入需要下载的服务:" fw
nginx="nginx"
apache="httpd"
mariadb="mariadb-server"
rsync="rsync"
php="php-fpm"
nfs="nfs-utils"
java="java"
redis="redis"
if [ "$fw" == "1" ] || [ "$fw" == "nginx" ];then
server_name=$nginx
elif [ "$fw" == "2" ] || [ "$fw" == "apache" ];then
server_name=$apache
elif [ "$fw" == "3" ] || [ "$fw" == "mariadb" ];then
server_name=$mariadb
elif [ "$fw" == "4" ] || [ "$fw" == "rsync" ];then
server_name=$rsync
elif [ "$fw" == "5" ] || [ "$fw" == "php" ];then
server_name=$php
elif [ "$fw" == "6" ] || [ "$fw" == "nfs" ];then
server_name=$nfs
elif [ "$fw" == "7" ] || [ "$fw" == "java" ];then
server_name=$java
elif [ "$fw" == "8" ] || [ "$fw" == "redis" ];then
server_name=$redis
elif [ "$fw" == "9" ] || [ "$fw" == "tomcat" ];then
server_name=(tomcat tomcat-webapps tomcat-admin-webapps)
else
echo "你输入的是不是表里的东西啊!"
exit
fi
install() {
yum install -y $server_name &>/dev/null
echo '安装中....'
if rpm -qa | grep -q $server_name;then
echo '安装成功'
else
echo '安装失败'
fi
}
install
#!/bin/bash
cat <<EOF
+---------+
|1.nginx |
+---------+
|2.php |
+---------+
|3.tomcat |
+---------+
|4.nfs |
+---------+
|5.apache |
+---------+
|6.Mysql |
+---------+
|7.rsync |
+---------+
EOF
check_yum(){
service=$1
service_name=`rpm -qa | grep -w $service|wc -l`
if [ $service_name -gt 0 ];then
echo "$service 已安装"
return 1
fi
}
install_yum_pkg(){
service=$1
check_yum $service
if [ $? -ne 1 ];then
echo "正在安装 $service..."
yum install -y $service &>/dev/null
if [ $? -ne 0 ];then
echo "$service 安装失败"
fi
fi
}
read -p '请输入编号或者服务名:' num
if [ $num == '1' -o $num == 'nignx' ];then
install_yum_pkg nginx
elif [ $num == '6' -o $num == 'Mysql' ];then
install_yum_pkg mariadb-server
elif [ $num == '5' -o $num == 'apache' ];then
install_yum_pkg httpd
fi