和其他语言一样,Shell也支持函数编程。接下来就让我们看看Shell中函数如何使用。


01

函数定义与使用

    Shell中定义函数有两种方式:

    第一种:function_name()

                 {

                      //命令

                 }

    第二种:function name

                 {

                        //命令

                 }

      Shell中接收参数,可以用$1,$2....$n接收n个参数。比如,我们写个函数,用于计算加、减、乘、除。分别接收三个参数。

Shell编程(四)函数的高级用法_java


     在命令行中用:calcul 30 + 20,即可计算出结果。


02


函数返回值

      在Shell里面有两种方式返回值,分别是return和echo。其实使用return返回值在1-255的整数。使用echo可以返回任何字符串结果,通常返回一个字符串或列表值。

     比如,我们要写个脚本监测redis进程是否正在运行。

Shell编程(四)函数的高级用法_java_02

     这里假设脚本的名称也是redis.sh,执行这个脚本会产生一个关键字为redis的进程。所以要使用$$获取本身的进程id,在下面使用grep -v进行过滤。

   上面假如redis进程是启动的,则返回0.一般返回0,也可以写为return。

 

    那么怎么使用echo返回结果呢,这里举个例子。比如我们要到/etc/passwd下面获取用户名。函数如下: 

function get_users

{

users=`cat /etc/passwd | cut -d: -f1`

echo $users

}

     然后,我们使用user_list=`get_users`将函数返回结果赋值给user_list。然后就可以使用for循环依次输出每个用户了。

for u in $user_list

do

echo "The $index user is : $u"

done

 

03


其他

     在Shell中,不做声明的变量都是全局变量,如果要在局部使用,需要声明为local。如果局部变量和全局的同名,则局部的优先级高。但是局部变量没有生命周期。

     最后,写个检测后台redis启动的脚本,如果没有启动就启动,附上代码供参考。这里由于redis是在本地编译的,地址在桌面上的redis-3.0.0文件夹下面。

Shell编程(四)函数的高级用法_java_03

     假如这里kill -9杀掉了redis进程,运行结果如下:

Shell编程(四)函数的高级用法_java_04