shell编程-函数

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
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇