三、函数定义和使用

2019-04-14  本文已影响0人  薛定谔的猫_1406

函数的定义和使用

函数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

库函数的使用经验
上一篇下一篇

猜你喜欢

热点阅读