shell 脚本--函数的高级使用

函数两种命名格式 如下,第一种是带()  第二种是不带()的

第一种小括号的
函数名(){
.......
commend
.......
}


第一种不带小括号的
function 函数名{
.......
commend
.......
}

函数的传递参数

int example_1(int arg1,int arg2) 
{
    arg1 = arg2
    ......
    ......
    return null
}

举例

int num1=10;
int num2=20;

函数调用形式一:int num3=example_1(num1,num2);
函数调用形式二:int num4;
             num4=example_1(num1,num2);

shell中传参

function name
{
    echo "Hello $1"
    echo "Hello $2"
}

#调用方式

name LIly Allen

编写 calcut.sh 内容如下:

#!/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

执行  ./calcut.sh 11 + 22 结果如下

~:$ ./calcut.sh 11 + 22
33

函数的返回值

使用return返回值的时候 只能返回 1-255的整数

函数使用return返回值,通常只是用来提供其它地方调用获取状态,因此通常仅返回0或者1;0标示成功,1标示失败.

使用echo可以返回任何字符串结果.

通常用于返回数据,比如一个字符串或者列表值

                  函数的返回方式
        方法一                  return
        方法二                  echo

示例 编写 getuser.sh  查询用户列表

#!/bin/bash

function get_user
{
	users=`cat /etc/passwd | cut -d: -f1`	
	echo $users
}

user_list=`get_user` #将函数变成结果集使用

for u in $user_list
do
	echo $u
done

执行 结果

~$ ./getuser.sh 
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
sshd
.....

局部变量和全局变量

不做特殊说明,shell中的变量都是全局变量 ,建议在大型脚本程序函数中,慎用全局变量

定义局部变量

定义局部变量时,使用local关键字
函数内和外部若存在同名变量,则函数内部变量覆盖外部变量

示例 编写 test.sh文件

#!/bin/bash

var1="Hello World"

function test
{
	local var1=87
	echo $var1
}

test
echo $var1

执行 结果

~$ ./test.sh 
87
Hello World

函数库:

定义一个函数库,该函数库实现以下几个函数:

使用方法

假如编写 myfunction.sh 里面包含的都是 各种function

那我们想使用myfunction.sh的时候 直接 可以使用

#!/bin/bash

. myfunction

# 可以直接使用 myfunction.sh 中的函数

经验之谈

1.库文件的后缀是任意的,但一般使用 .lib

2.库文件通常没有执行选项

3.库文件无需和脚本同级目录,只需在脚本中引用时指定

4.第一行一般使用#!/bin/echo,输出警告信息,避免用户执行

发布了25 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ChaoLi_Chen/article/details/103195342