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摘要为:5615ac3ce36ec58748a80649c3599d88  test1.sh
请输入一个文件名:test2.sh
test2.sh 的md5摘要为:4446b536dff610ea440663147914c52b  test2.sh
请输入一个文件名:ttt.sh
ttt.sh 的md5摘要为:5615ac3ce36ec58748a80649c3599d88  ttt.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<len;i++))
do
    echo ${myarray[$i]}
    sleep 1
done


[liutaostdio@WLJY01 myscript]$ sh  array_2.sh
数组长度:11
数组的元素依次为:
0
1
2
3
       ...

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.sh  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
2015-08-15
119.24.21.0/24
119.24.22.0/24
119.24.23.0/24
119.24.24.0/24
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值