shell 函数.数组

shell和函数的定义 1.linux shell 函数
将一组命令集或语句形成一个可用的块, 这些语句块称为函数。
2.shell 函数的组成
函数名:函数名字,注意一个脚本中函数名要唯一,否则会引起调用函数紊乱。
函数体: 函数内部命令的集合,实现一个业务的功能。
3.shell 函数定义的格式

function函数名() # function可以省略,注意()内部不带任何参数。 { 命令1 命令2 . . . }

函数使用方法举例 1.函数定义及引用实例一: 最简单的定义及引用
#!/bin/sh # 演练函数的定义及引用方法 # func_1.sh function print_welcome()#function可以去掉,注意括号里不能有参数 { echo "演练函数的定义及引用方法:" echo "welcome,now time is `date`" } print_welcome #函数的名字,调用[liu@WLJY01 myscript]$ sh func_1.sh 演练函数的定义及引用方法: welcome,now time is Wed Aug 12 16:01:58 CST 2015

2.函数定义及引用实例二:向函数传递参数演练
向函数传递参数就像在一般脚本中使用特殊变量 1,1 ,2 … $ 9一样,函数取得所传参数后,最好先在函数内重新设置变量保存所传的参数。
程序功能:向函数传递一个变量值,对该变量值进行相关的运算,并输出结果。
!/bin/sh #演练函数内部参数的传递方法 #func_2.sh function sum() { echo "演练函数内参数的传递的方法" if [ $# -eq 2] #如果参数的个数等于2 then echo "符合函数要求的参数个数" a1=$1 a2=$2 let sum=a1+a2 else echo "函数要求的参数个数不符,请重新输入..." fi echo "$a1+$a2=$sum" } sum 10 90 #函数名和两个参数,调用[liu@WLJY01 myscript]$ sh func_2.sh 演练函数内参数的传递的方法(注意变量的接收方法) 符合函数要求的参数个数 10+90=100

3.函数文件和脚本文件不在同一个文件中,如何调用该函数?
程序功能:输入一个文件的路径,然后打印出这个文件的MD5摘要信息。
#!/bin/sh #独立函数文件演练 #func_3.sh function file_md5() { if [ $# -nq 1] #如果参数的个数不等于1 then echo "函数参数个数有误,请输入一个参数" else filename=$1 md5=$(md5sum $filename) echo "$filename 的md5摘要为:$md5" fi } #注意这里没有因用户函数,也没提供参数#!/bin/sh #演练函数的载入与调用 #func_call.sh . ./func_3.sh #注意格式:点 空格 函数文件地址 while [ 1 ] do read -p "请输入一个文件名:" file file_md5 $file #在这里调用函数,传入参数 done[liutaostdio@WLJY01 myscript]$ cat func_3.sh# 函数文件 [liutaostdio@WLJY01 myscript]$ sh func_call.sh# 脚本文件 请输入一个文件名:test1.sh test1.sh 的md5摘要为:5615ac3ce36ec58748a80649c3599d88test1.sh 请输入一个文件名:test2.sh test2.sh 的md5摘要为:4446b536dff610ea440663147914c52btest2.sh 请输入一个文件名:ttt.sh ttt.sh 的md5摘要为:5615ac3ce36ec58748a80649c3599d88ttt.sh

注意函数导入的方法:
.空格符文件名

数组的定义以及常用操作 1.数组的定义
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。
数组的定义:
数组名=(元素1 元素2元素n) # 一对括号表示是数组,数组元素用“空格”符号分割开来。如:myarray=(1 3 5 7 9) # 注意定义的方法,小括号、逗号。

2.数组常用操作
1)定义一个数组: myarray=(1 2 3 4 5);
2)读取数组的某一个元素 :
echo ${myarray[下标值]} # 注意数组名称必须使用{} 括起来, 下标值从0开始编号;

3)数组元素的赋值:
myarray[下标值] = xxx;

4)显示数组的所有元素:
echo ${myarray[*]};

5)获得数组的长度(元素的个数):
echo${#array[@]} 或者echo ${#array[*]};

6)删除一个数组元素:
unset myarray[下标值]

3.数组常用操作的演练,参考程序:
#!/bin/sh #演示数组的定义及常用操作 myarray=(0 1 2 3 4 5 6 7 8 9 10)echo "数组myarray 初始的所有元素是: ${myarray[*]}" echo "数组myarray 第一个元素的值是myarray[0]:${myarray[0]}" echo "数组myarray的长度是:${#myarray[@]}" echo "数组myarray的长度是:${#myarray[*]}"#修改第一个元素的值 myarray[0]=9999 echo "修改第一个元素后,数组myarray的所有元素是:${myarray[*]}"#删除第一个元素的值 unset myarray[0] echo "删除第一个元素后,数组myarray的所有元素是:${myarray[*]}"[liutaostdio@WLJY01 myscript]$ sh array_1.sh ; 数组myarray 初始的所有元素是: 0 1 2 3 4 5 6 7 8 9 10; 数组myarray 第一个元素的值是myarray[0]: 0; 数组myarray 的长度是: 11; 数组myarray 的长度是: 11; 修改第一个元素后,数组myarray 的所有元素是: 9999 1 2 3 4 5 6 7 8 9 10; 删除第一个元素后,数组myarray 的所有元素是: 1 2 3 4 5 6 7 8 9 10。

数组使用方法举例 1.常规方法输出数组的所有元素,并进行独立的处理。
用 ${myarray[*]} 直接输出的所有元素的个数,对数组元素进行独立操作的时候,不太方便,所以有必要。
#!/bin/sh # 循环读取数组列表演示 myarray=(0 1 2 3 4 5 6 7 8 9 10) len=${#myarray[@]} echo "数组长度:$len" echo "数组的元素依次为:" for ((i=0; $i

【shell 函数.数组】2.有时候不知道数组中元素的个数,因此数组的长度事先是不知道的,因此此时,需要动态的扩展数组长度与空间。
#!/bin/sh # 循环读取数组列表演示 # 功能:在授权有效期内形成机器可信任列表 # 执行方法:脚本名 有效日期 server1 server2 server3 server...# 获得所有参数存入数组 list=($*) len=${#list[@]}# 第一个元素为有效期 echo ${list[0]}>./trustip.txt#输出到txt文件 for ((i=1; $i<$len; i++)) do echo "${list[$i]}" >>./trustip.txt#追加到txt文件 done#显示这个时间可信任的IP列表 cat ./trustip.txt[liutaostdio@WLJY01 myscript]$ sh array_3.sh2015-08-15119.24.21.0/24119.24.22.0/24119.24.23.0/24119.24.24.0/24 2015-08-15 119.24.21.0/24 119.24.22.0/24 119.24.23.0/24 119.24.24.0/24 2015-08-15 119.24.21.0/24 119.24.22.0/24 119.24.23.0/24 119.24.24.0/24

    推荐阅读