路漫漫其修远兮
吾将上下而求索

shell编程(5):函数和文件包含,脚本调试

1、脚本参数传递

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$1 $2 … $n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

[root@localhost ~]#vim test.sh 
#!/bin/bash

echo "script name :$0"
echo "first paremeter:$1"
echo "second paremeter:$2"
echo "thrid paremeter:$3"
echo "total num of paremeter:$#"
echo "$$"

[root@localhost ~]#./test.sh 
script name :./test.sh
first paremeter:
second paremeter:
thrid paremeter:
total num of paremeter:0
31762

[root@localhost ~]#./test.sh 1 2 3
script name :./test.sh
first paremeter:1
second paremeter:2
thrid paremeter:3
total num of paremeter:3
31764

[root@localhost ~]#./test.sh 1 3
script name :./test.sh
first paremeter:1
second paremeter:3
thrid paremeter:
total num of paremeter:2
31765

说明:

1、$1    传递到脚本中的第一个参数

2、$2    传递到脚本中的第二个参数

3、$#    传递到脚本的参数个数

4、$$    脚本运行的当前进程ID号

5、$*    以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

6、$@    与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

7、$?    显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

8、$0    执行脚本的文件名

$* 与 $@ 区别:

        相同点:都是引用所有参数。 

        不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 "*" 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

[root@localhost ~]#vim test.sh 
#!/bin/bash

echo "---\$*---"
for i in "$*"; do
	echo $i
done

echo "---\$@---"
for i in "$@"; do
	echo $i
done
[root@localhost ~]#./test.sh 1 2 3 
---$*---
1 2 3
---$@---
1
2
3

2、函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

shell中函数的定义格式如下:

[ function ] funname [()]

{

    action;

    [return int;]

}

说明:

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255   

举个栗子

[root@localhost ~]#cat test.sh 
#!/bin/bash

function demo()
{
	echo "this is a demo"
}

echo "start"
demo
echo "finish"

[root@localhost ~]#bash test.sh 
start
this is a demo
finish

带有返回值得函数,demo的传入参数有两个,这个和脚本的传入参数是一样的,函数名不变化,函数里面直接使用$1,$2,,来调用传入的参数,经过计算后,将结果通过return返回给程序,通过$?来将结果显示出来。

[root@localhost ~]#cat test.sh 
#!/bin/bash


function demo()
{
	echo "this is a demo"
	let a=$1*$2
	return $a
}

echo "start"
demo 5 3
echo "finish $?"

[root@localhost ~]#bash test.sh 
start
this is a demo
finish 15

函数返回值在调用该函数后通过 $? 来获得。

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

3、调试

在编写shell脚本时,shell提供了一些用于调试的选项:便于发现脚本中的错误

-n    读一遍脚本的命令但不执行,用于检查脚本中的错误。
-v    一遍执行脚本,一遍将执行过的脚本命令打印到标准错误输出。
-x    提供跟踪执行信息,将执行的每一条命令和结果一次打印出来。

bash -n script.sh    #检查语法,有语法错误会显示

bash -x script.sh    #调试执行,会将每个语句的执行过程打印出来

bash -v script.sh

4、文件包含

        先放置

未经允许不得转载:江哥架构师笔记 » shell编程(5):函数和文件包含,脚本调试

分享到:更多 ()

评论 抢沙发

评论前必须登录!