c语言sscanf函数的用法是什么
272
2022-11-02
shell脚本之函数和数组
一、1.1shell函数
1)将命令序列按格式写在一起
2)可方便重复使用命令序列
shell函数定义
[function] 函数名(){ 命令序列 [return x] ###使用return或exit可以显式地结束函数}函数名
案例
开头定义个函数名f1,函数序列功能式打印”this is liup niubi kls“,结尾函数名用来调用函数
案例2
图中结尾只调用了一个函数,当脚本在运行时只会调用第一个函数序列里的命令
makelocalrepo
uselocalrepo
加上用来调用其他两个函数
因此:函数定义完之后并不会自动执行,需要调用才行,好处在于可以写一段功能代码作为函数,有需要就直接调用
函数运行方式自上而下依次运行
1.2函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值使用原则:1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码2、退出状态码必须是0~255,超出时值将为取余256 例444 % 256
案例:求和
案例:返还乘积
1.3函数的传参
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n的形式来获取参数的值
例:通过位置变量进行求和
1.4函数的作用范围
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
示例:
函数内部变量通过local来实现
通过定义myfun函数,在其内部设置局部变量i
函数内部和外部分别赋值,进行结果验证
定义变量的方式1)定义的变量都是从上往下,里面有local后变量就固定在里面(此为局部)
2)注释local变量就是全局,设置的变量就是全体(人员)
如果是用source执行脚本的话就能看出差别
1.5函数的参数
参数的用法
函数名称 参数1 参数2 参数3 ....
参数的表示方法
$1$2$3......${10}${11}......
案例:阶乘
echo输出的结果在函数里不在for循环里输出的结果只有720
0
当echo输出的结果在for循环里输出的结果会包含720 ,但也会显示多余的数(过程)
案例:
(40是因为我为创建此文件 80是我用touch创建了一个同名文件)
1.6递归函数
调用自己本身的函数
递归的遍历目录:定义递归函数list——files来实现
盲盒小惊喜
给命令行提示字符加颜色
PS1=")[Ne [1; 34m\] [Nu@\h \W]II$)[Ne [Om\]
PS1="\[Ye [1;35m\] [)[Ne[1;34m\]\u\[\e[1;36m\]@\[\e[1;34m\]\h
\[\e [1; 31m\]\w)[Ve[1;35m\]]\[Ne [1;36m\]1I$)[Ve[om\]"
\[\e[1;35m\][====>定义左边的"["
\[\e[1;34m\]\u ====>定义用户名
\[\e [1; 36m\] @ ==定义"@"
\[\e[1;34m\]\h ====>定义第一个点(.)之前的主机名
\[\e[1;31m] \w ====>定义目录完整路径
\[\e [1; 35m]] =--=>定义"]"
\[\le[1;36m\]\\$ ====>定义"#"或"$"e
\[\e[Om\]==>一段不显示字串的结束
将途中注释换掉打印将不带颜色
案例:阶乘 递归计算(输入5)
结果的输出步骤
二、数组
2.1Shell 数组的定义
1)在 Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔。由此,定义数组的一般形式为:
array_name=(ele1 ele2 ele3 ... elen)
注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。
2)格式
数组名称:array_name —— 数据元素:ele1 ele2 ele3空格分开 —— 数据长度:3 ——数组下标:长度3每个数据元素下面都跟着下标索引,从0开始,0对应ele1、1对应ele2依次类推
3)bash Shell只支持一维数组,数组从0开始标号,以array[x]表示数组元素,所以array[0]表示array数组的第一个元素
2.2数组的分类
2.3数组的定义方式四种
方法一:
直接把要加入的数组放入括号里,中间用空格隔开
$nu显示数组0位上的字符,加上#后显示该字符的长度
方法二
方法二的是精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续
方法三
#显示数组长度【】里的*表示全部数组的@表示一个意思
当#去掉是【】里的2表示数组里2号位置对应的字符(因数组排序从0开始)
方法四
定义数组可以是不连贯的,!可看见定义数组的下标索引
2.4元素切片和替换
第一次切片:{2:3}从2对应下标索引开始 ,显示3个
第二层切片:{2:4}从2对应的下标索引开始,显示4个
.....
/3/55 :表示3对应的下标索引替换成55
/8/55 :表示8对应下标索引替换成55
2.5数组的删除和追加
根据数组的下标索引对应数字来删除55
直接删除整个数组
方法一追加变量:
数组名[下标]=变量
方法二追加变量:
数组名[${数组名[@]}]=变量名
方法三追加变量:
数组名+=(变量1 变量2 ...)
2.6冒泡排序
冒泡原理:
array=(90 70 33 49 20 45) 第一轮90 70 33 49 20 45 第一次对比 数组长度-1 第一轮比较往后,最大值9070 90 33 49 20 45 第二次对比70 33 90 49 20 45 第三次对比70 33 49 90 20 45 第四次对比70 33 49 20 90 45 第五次对比70 33 49 20 45 90 第二轮70 33 49 20 45 90 第一次对比 数组长度-1 第二轮比较往后,最大值7033 70 49 20 45 90 第二次对比33 49 70 20 45 90 第三次对比33 49 20 70 45 90 第四次对比33 49 20 45 70 90 第三轮33 49 20 45 70 90 第一次对比 数组长度-1 第三轮比较往后,最大值4933 20 49 45 70 90 第二次对比 20 33 49 45 70 90 第三次对比20 33 45 49 70 90 第四轮20 33 45 49 70 90 第一次对比 数组长度-1 第四轮比较往后,最大值4520 33 45 49 70 90 第一次对比 20 33 45 49 70 90 第二次对比 20 33 45 49 70 90 第五轮20 33 45 49 70 90 第一次对比 数组长度-1 第五轮比较往后,最大值3320 33 45 49 70 90
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~