shell函数与数组
2017-10-18 00:26
113 查看
shell函数与数组
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.为什么要使用shell函数
简单的说函数的作用就是把程序里多次调用的相同的代码部分定义成一份,然后起个名字,所有的调用都只用这个名字就可以了。修改代码时,只需要改变函数体内的代码即可
二.shell语法格式
三.shell函数的执行
四.案例展示
1.调用函数
2.导入函数
3.函数传参
4.应用案例
五.数组介绍
简单的说,数组就是相同数据类型的元素按一定顺序排列的集合。数组就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合。这个名字成为数组名,编号成为数组下标。组成数组的各个变量成为数组的分量,也成为数组的元素,有时也成为下标变量。
六.数组的定义以及基本使用
1>.声明数组
2>.数组添加新元素
3>.数组的修改
a>.基于下标的形式修改;
b>.重新赋值方式修改
4>.数组的删除
5>.数组的截取
七.应用案例
1.案例一:把命令结果作为数组元素。
2.用法展示
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.为什么要使用shell函数
简单的说函数的作用就是把程序里多次调用的相同的代码部分定义成一份,然后起个名字,所有的调用都只用这个名字就可以了。修改代码时,只需要改变函数体内的代码即可
1 a>.把相同的代码定义成函数,可以减少程序代码量; 2 b>.增加程序的可读,易读性; 3 c>.实现程序的功能模块化;
二.shell语法格式
1 function 函数名() { 2 源代码 3 return 4 }
三.shell函数的执行
1 调用函数 2 1>.直接执行函数名即可 3 函数名 4 注意: 5 a>.执行函数时,不要带小括号了; 6 b>.函数定义及函数体必须在要执行的函数名的前面定义,shell的执行从上到下按行执行的; 7 2>.带参数的函数执行方法 8 函数名 参数1 参数2 ..... 9 注意: 10 a>.在函数体中位置参数($1,$2,$3,...,$#,$*,$?以及$@)都可以是函数的参数; 11 b>.父脚本的参数则临时的被函数参数所掩盖或隐藏; 12 c>.$0比较特殊,他仍然是父脚本的名称; 13 d>.当函数完成时,原来的命令行参数会恢复; 14 e>.在shell函数里面。return命令的功能与工作方式与exit相同,用于跳出函数; 15 f>.在shell函数体里面使用exit会终止整个shell脚本; 16 g>.return语句会返回一个退出值给调用的程序;
四.案例展示
1.调用函数
1 [root@yinzhengjie shell]# more function1.sh 2 #!/bin/bash 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 #EMAIL:y1053419035@qq.com 6 7 function yinzhengjie(){ 8 echo "尹正杰到此一游!" 9 } 10 yinzhengjie 11 [root@yinzhengjie shell]# 12 [root@yinzhengjie shell]# sh function1.sh 13 尹正杰到此一游! 14 [root@yinzhengjie shell]#
2.导入函数
1 [root@yinzhengjie shell]# pwd 2 /root/yinzhengjie/shell 3 [root@yinzhengjie shell]# 4 [root@yinzhengjie shell]# more function1.sh 5 #!/bin/bash 6 #@author :yinzhengjie 7 #blog:http://www.cnblogs.com/yinzhengjie 8 #EMAIL:y1053419035@qq.com 9 10 function yinzhengjie(){ 11 echo "尹正杰到此一游!" 12 } 13 yinzhengjie 14 [root@yinzhengjie shell]# 15 [root@yinzhengjie shell]# more function2.sh 16 #!/bin/bash 17 #@author :yinzhengjie 18 #blog:http://www.cnblogs.com/yinzhengjie 19 #EMAIL:y1053419035@qq.com 20 21 #如果存在“function1.sh”这个文件,就导入它,注意导入可以用"." 22 [ -f /root/yinzhengjie/shell/function1.sh ]&& . /root/yinzhengjie/shell/function1.sh || exit 100 23 24 yinzhengjie 25 [root@yinzhengjie shell]# 26 [root@yinzhengjie shell]# sh function2.sh 27 尹正杰到此一游! 28 尹正杰到此一游! 29 [root@yinzhengjie shell]#
3.函数传参
1 [root@yinzhengjie shell]# more function3.sh 2 #!/bin/bash 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 #EMAIL:y1053419035@qq.com 6 7 function yinzhengjie(){ 8 echo "Welcome to beijing,[$1]." 9 } 10 [root@yinzhengjie shell]# 11 [root@yinzhengjie shell]# 12 [root@yinzhengjie shell]# 13 [root@yinzhengjie shell]# more function4.sh 14 #!/bin/bash 15 #@author :yinzhengjie 16 #blog:http://www.cnblogs.com/yinzhengjie 17 #EMAIL:y1053419035@qq.com 18 19 #导入函数 20 . /root/yinzhengjie/shell/function3.sh 21 yinzhengjie 尹正杰 22 23 [root@yinzhengjie shell]# 24 [root@yinzhengjie shell]# 25 [root@yinzhengjie shell]# sh function4.sh 26 Welcome to beijing,[尹正杰]. 27 [root@yinzhengjie shell]# 28 [root@yinzhengjie shell]#
4.应用案例
1 [root@yinzhengjie shell]# more CheckWeb.sh 2 #!/bin/bash 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 #EMAIL:y1053419035@qq.com 6 7 function CheckUrl(){ 8 curl -I -s $1 | head -1 && return 0 || return 100 9 } 10 11 CheckUrl $1 12 [root@yinzhengjie shell]# 13 [root@yinzhengjie shell]# sh CheckWeb.sh www.baidu.com 14 HTTP/1.1 200 OK 15 [root@yinzhengjie shell]# 16 [root@yinzhengjie shell]#
五.数组介绍
简单的说,数组就是相同数据类型的元素按一定顺序排列的集合。数组就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合。这个名字成为数组名,编号成为数组下标。组成数组的各个变量成为数组的分量,也成为数组的元素,有时也成为下标变量。
六.数组的定义以及基本使用
1>.声明数组
1 [root@yinzhengjie ~]# yinzhengjie=(100 200 300) #定义数组 2 [root@yinzhengjie ~]# echo ${#yinzhengjie[@]} #查看数组长度方式一 3 3 4 [root@yinzhengjie ~]# echo ${#yinzhengjie[*]} #查看数组长度方式二 5 3 6 [root@yinzhengjie ~]# 7 [root@yinzhengjie ~]# echo ${yinzhengjie[0]} #查看某个数组 8 100 9 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} #查看整个数组的元素 10 100 200 300 11 [root@yinzhengjie ~]#
2>.数组添加新元素
1 [root@yinzhengjie ~]# echo ${#yinzhengjie[*]} 2 3 3 [root@yinzhengjie ~]# 4 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} 5 100 200 300 6 [root@yinzhengjie ~]# 7 [root@yinzhengjie ~]# yinzhengjie[3]=jie 8 [root@yinzhengjie ~]# 9 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} 10 100 200 300 jie 11 [root@yinzhengjie ~]#
3>.数组的修改
a>.基于下标的形式修改;
1 [root@yinzhengjie ~]# echo ${#yinzhengjie[*]} 2 4 3 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} 4 100 200 300 jie 5 [root@yinzhengjie ~]# yinzhengjie[0]=yin 6 [root@yinzhengjie ~]# yinzhengjie[1]=zheng 7 [root@yinzhengjie ~]# 8 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} 9 yin zheng 300 jie 10 [root@yinzhengjie ~]#
b>.重新赋值方式修改
1 [root@yinzhengjie ~]# yinzhengjie=(100 200 300 400 500 600) 2 [root@yinzhengjie ~]# echo ${#yinzhengjie[@]} 3 6 4 [root@yinzhengjie ~]# echo ${yinzhengjie[@]} 5 100 200 300 400 500 600 6 [root@yinzhengjie ~]# 7 [root@yinzhengjie ~]# a=(${yinzhengjie[@]/500/5}) 8 [root@yinzhengjie ~]# echo ${a[@]} 9 100 200 300 400 5 600 10 [root@yinzhengjie ~]# echo ${yinzhengjie[@]} 11 100 200 300 400 500 600 12 [root@yinzhengjie ~]#
4>.数组的删除
1 [root@yinzhengjie ~]# echo ${#yinzhengjie[*]} 2 4 3 [root@yinzhengjie ~]# 4 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} 5 yin zheng 300 jie 6 [root@yinzhengjie ~]# unset yinzhengjie[2] 7 [root@yinzhengjie ~]# 8 [root@yinzhengjie ~]# echo ${#yinzhengjie[*]} 9 3 10 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} 11 yin zheng jie 12 [root@yinzhengjie ~]# 13 [root@yinzhengjie ~]# unset yinzhengjie 14 [root@yinzhengjie ~]# echo ${yinzhengjie[*]} 15 16 [root@yinzhengjie ~]#
5>.数组的截取
1 [root@yinzhengjie ~]# yinzhengjie=(100 200 300 400 500 600) 2 [root@yinzhengjie ~]# echo ${#yinzhengjie[@]} 3 6 4 [root@yinzhengjie ~]# echo ${yinzhengjie[@]} 5 100 200 300 400 500 600 6 [root@yinzhengjie ~]# echo ${yinzhengjie[@]:1:3} 7 200 300 400 8 [root@yinzhengjie ~]# echo ${yinzhengjie[@]:3:2} 9 400 500 10 [root@yinzhengjie ~]#
七.应用案例
1.案例一:把命令结果作为数组元素。
1 [root@yinzhengjie shell]# yinzhengjie=($(ls)) 2 [root@yinzhengjie shell]# ls | wc -l 3 17 4 [root@yinzhengjie shell]# for((i=0;i<${#yinzhengjie[@]};i++));do echo ${yinzhengjie[$i]};done 5 argv1.sh 6 argv2.sh 7 argv3.sh 8 CheckWeb.sh 9 file_backup.sh 10 function1.sh 11 function2.sh 12 function3.sh 13 function4.sh 14 ls.log 15 partitions.sh 16 read.sh 17 res.txt 18 Tetris.sh 19 until.sh 20 while.sh 21 yinzhengjie.sh 22 [root@yinzhengjie shell]# 23 [root@yinzhengjie shell]# for file in ${yinzhengjie[@]};do echo $file;done 24 argv1.sh 25 argv2.sh 26 argv3.sh 27 CheckWeb.sh 28 file_backup.sh 29 function1.sh 30 function2.sh 31 function3.sh 32 function4.sh 33 ls.log 34 partitions.sh 35 read.sh 36 res.txt 37 Tetris.sh 38 until.sh 39 while.sh 40 yinzhengjie.sh 41 [root@yinzhengjie shell]#
2.用法展示
1 [root@yinzhengjie shell]# more array.sh 2 #!/bin/bash 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 #EMAIL:y1053419035@qq.com 6 7 array=( 8 yinzhengjie 9 bingan 10 alex 11 mage 12 oldboy 13 brother 14 ) 15 16 17 for ((i=0;i<${#array[*]};i++)) 18 do 19 echo "This is num [$i],then content is ${array[$i]}" 20 done 21 22 23 echo -----------------line------------------------ 24 25 26 for name in ${array[@]} 27 do 28 echo "The boy is [$name]" 29 done 30 [root@yinzhengjie shell]#
相关文章推荐
- linux基础学习第十二天(shell函数、数组以及yum使用及编译安装)
- 以不同方式向Shell函数传递数组参数
- Shell函数与数组
- 第五章 Shell函数与数组
- 4、Shell函数,Shell数组,变量替换
- Shell函数与数组
- ajax传递给后台数组参数方式
- scala中的数组和集合操作
- JS_对象_数组_json使用
- C语言的数组名和对数组名取地址
- 算法与数据结构基础1:C++实现动态数组
- C语言定义数组的几种形式
- 给js创建的一个input数组绑定click事件
- 【搜狗笔试题】给定一个数组a[N],我们希望构造数组b[N]
- Java语言基础(数组)
- 求数组中两个元素的最小距离
- coding - 把数组排成最小的数
- C++ - "array<>"数组容器 详解
- [转载]c语言中数组作为函数参数
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x