三、函数定义和使用

函数的定义和使用

函数1

函数的定义1

函数的定义2

函数的调用
# 命令行下定义行数
[root@izuf6j02r724hog9g0lyndz shell_practice]# test()
> {
> echo "hello world"
> }
[root@izuf6j02r724hog9g0lyndz shell_practice]# test
hello world
[root@izuf6j02r724hog9g0lyndz shell_practice]# 

案例1:定义脚本,当nginx进程挂掉之后会自动把进程拉起

如果通过ps -ef 抓取到进程后,通过echo ? =0,可以判断该进程是存在的,否则该进程就不存在,?=1进程已经死亡。假如我们在命名脚本的时候名字中包含nginx,此时我们执行脚本的时候脚本依旧作为一个进程,此时即使我们在脚本中过滤了grep 的进程,依旧会输出1,因此命名的时候不能讲脚本的名字中包含nginx。 会输出脚本执行的子进程的pid输出出来,因此可以先通过this_pid =,grep -v $this_pid自然会过滤该脚本的进程

#!/bin/bash
#

this_pid=$$

while true
do
ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null

if [ $? -eq 0 ];then
    echo "Nginx is running well"
    sleep 3
else
    systemctl start nginx
    echo "Nginx is down,Start it...."
fi
done

向函数传递参数

shell中传参

调用有参数的函数

使用$1,$2等参数

写一个脚本,可以实现"+-*/"

#!/bin/bash
#

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


calcu $1 $2 $3
#命令行调用
sh calcu.sh 20 + 30

函数返回值

返回值的方式

返回1-255区间的值

使用echo返回

实例:返回值判断nginx进程是否存在,使用this_pid=$$的时候不能用空格

三元运算符
#! /bin/bash
#

this_pid=$$

function n
{
        ps -ef | grep nginx |grep -v grep | grep -v  $this_pid &> /dev/null
        if [ $? -eq 0 ];then
                return
        else
                return 1
        fi


}

n && echo "runnint" || echo "stoped"

输出所有用户,用echo做返回值

#! /bin/bash
#
function users
{
        users=`cat /etc/passwd |cut -d: -f1`
        echo $users
}
user_list=`users`
for i in $user_list
do
        echo $i
done

局部变量与全局变量

全局变量

局部变量

如上,虽然对var2变量进行了赋值,但是因为变量赋值的函数并没有被调用,因此var2输出还是null

这个var2赋值的函数test一旦被调用,var2就变成一个全局变量,此时可以输出var2的值,87

使用loal关键字,var2变成局部变量

函数库

为什么要用函数库

函数库实例

函数库实例
  1. 定义库函数:vi bash_function。注意这里的命令替换,假如用expr 做数学运算,要转义,同时要用命令替换,假如用$(())来做数学运算,不用转义,同时不用加``符号。
function add
{
        echo "`expr $1 + $2`"
}

function reduce
{
        echo "`expr $1 - $2`"
}

function mul
{
        echo "$(($1 * $2))"
}

function mult
{
        echo "`expr $1 \* $2`"
}
~  
  1. 使用.来做命令替换
#! /bin/bash
#
. /root/shell_practice/bash_function

add 1 2
mult 3 4

mul 3 5

库函数的使用经验
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容