Linux之shell函数 数组

一、函数

1.函数的作用

语句块定义成函数约等于别名,定义函数,再引用函数

封装的可重复利用的具有特定功能的代码

2.函数的基本格式

法一:
[function] 函数名 (){
	命令序列
	[return x]         #使用return或者exit可以显式的结束函数
}
 
法二:
函数名(){
	命令序列
}

3.函数注意事项

1.直接写函数中调用

2函数直接写函数名同名函数后一个生效

3.调用函数一定要先定义

4.只要先定义了调用的其他函数定义顺序无关

4.函数调用的方法

#!/bin/bash
h () {
echo "hello"
}
 
w () {
echo "world"
}
 
nihao () {
h
w
}
 
h
w
nihao

5.函数的返回值

return表示退出函数并返回一个退出值,脚本中可以用? 变 量 显 示 该 值 使 用 原 则 : 1 、 函 数 一 结 束 就 取 返 回 值 , 因 为 ?变量显示该值 使用原则:

1、函数一结束就取返回值,因为?变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时值将为取余256

#!/bin/bash
user () {
if [ $USER = root ]
 then echo "这是管理员用户"
else
echo "这不是管理员"
return 1
fi
}
user

6.函数的传参

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

#!/bin/bash
sum () {
echo "第一个变量:" $1
echo "第二个变量:" $2
let n=$1+$2
echo $n
}
sum $2 $1

7.在外部调用函数

在外部调用命令需要先source一下。然后调用函数,再调用函数中的变量

[root@yxp data]#vim function.sh
#!/bin/bash
color () {
RED="echo -e \E[31m"
GREEN="echo -e \E[32m"
END="\E[0m"
}

8.函数变量的作用范围

函数在shell脚本中仅在当前shell环境中有效

shell脚本中变量默认全局有效

将变量限定在函数内部使用local命令

#!/bin/bash
aa () {
a=10
}
 
a=20
aa
echo $a

9.函数的递归

函数调用自己本身的函数


``#!/bin/bash
fact () {
#判断传入的参数,如果是0,则直接输出1
if [ $1 -eq 0  -o  $1 -eq 1 ]
then
   echo 1
else
#如果传入的参数不是1,则函数调用函数自身,传入参数计算
echo $[$1* $(fact $[$1-1])]
fi
}
fact $1`
## 1.


二、数组

1.数组的定义

数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
数组的分类

普通数组:不需要声明直接定义,下标索引只能是整数
关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串
数组的定义方式
(30 20 10 60 50 40)
0 1 2 3 4 5

第一种:直接把要加入数组的元素用小括号括起来,中间用空格分开
num= (11 22 33 44)
${#num}显示宁符串长度
数组名=(value0 value1 value2)
显示所有 ${num[*]}

第二种:精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续
num= ([0]-55 [1]=66 [2]=77 [4]=88)

数组名=( [0]=value [1]=value [2]=value. . . )

第三种:先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组
list=“11 12 13 14”
num= ($list)

2.数组的数据类型

数值类型
字符类型:
使用"”或’’定义

#数组可以是数值型
[root@yxp ~]#a=(1 2 3 4 5);echo ${a[@]}
1 2 3 4 5
 
#数组可以是混合型
[root@yxp ~]#a=(a 1 2 apple);echo ${a[@]}
a 1 2 apple

3.获取数组的数据列表

echo ${数组名[*]}
echo ${数组名[@]}

4.获取数组长度

echo ${#数组名[*]} 
echo ${#数组名[@]} 

5.获取数组下标对应的值

数组名=(元素0  元素1  元素2  ……)					定义数组
echo ${数组名[索引值]}							输出数组索引值对应的元素,索引值为从0开始


三、冒泡排序


​​​类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。
基本思想:
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,
把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),
这样较小的元素就像气泡一样从底部上升到顶部。
算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,
一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,
同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,
以确定是否交换位置,对比和交换次数随排序轮数而减少
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 中,获取数组长度可以使用 Shell 编程语言中的一些内置函数或命令。以下是一些获取数组长度的方法: 1. 使用 Shell 数组长度变量 在 Shell 中,可以使用特殊变量`${#array[@]}`来获取数组的长度。例如,对于以下的数组: ```bash my_array=("apple" "banana" "orange" "pear") ``` 可以使用以下命令获取数组长度: ```bash echo ${#my_array[@]} # 输出 4 ``` 2. 使用 awk 命令 awk 命令可以用来处理文本数据,也可以用来获取数组长度。假设有一个数组 file_array,可以使用以下命令获取数组长度: ```bash awk 'BEGIN{print ARGC-1}' "${file_array[@]}" ``` 其中,ARGC 是 awk 内置变量,表示命令行参数的数量。在这里,我们将数组作为 awk 命令的命令行参数传递,并使用 ARGC-1 来获取数组长度。 3. 使用 wc 命令 wc 命令可以用来统计文件中的字数、行数、字符数等信息。对于数组,我们可以将其转换为文本文件,然后使用 wc 命令来获取其行数,即数组长度。例如,对于以下数组: ```bash my_array=("apple" "banana" "orange" "pear") ``` 可以使用以下命令将其转换为文本文件: ```bash echo "${my_array[@]}" | tr ' ' '\n' > my_array.txt ``` 然后使用以下命令获取数组长度: ```bash wc -l < my_array.txt # 输出 4 ``` 需要注意的是,这种方法会将数组转换为文本文件,可能会降低效率,不过对于小数组来说并不会有太大影响。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值