Linux系统配置(shell函数与数组)
目录
前言
一、函数
1、创建函数
2、使用位置参数
3、乘法运算
4、作用范围
5、计算阶乘
6、筛选目录和文件
二、数组
1、表示方法
2、使用方法
3、使用数组的某个值
4、使用整个数组
5、冒泡排序
结语
前言
在shell中使用函数可以将提前写好的内容随时调用,数组则可以存放多个值,使用时可选择输出某一个值或整体
一、函数
1、创建函数
在shell脚本中添加函数格式如下
function 函数名 {
操作或命令
}或
函数名 () {
操作或命令
}例
[root@pc1 ~]# vi sh
#!/bin/bash
a ( ) {
echo 运行成功
}
b=1
while [ $b -le 3 ]
do
a
b=$[$b+1]
done
echo 再运行一次
a
echo 结束[root@pc1 ~]# sh sh
运行成功
运行成功
运行成功
再运行一次
运行成功
结束
2、使用位置参数
计算工资
[root@pc1 ~]# vi sh
#!/bin/bash
b () {
dixin=6000
for a in $1
do
gongzi=`expr $dixin + 100 \* $2`
echo $a工资为:$gongzi
done
}
echo 工资结果如下
c=$(b 张三 2)
echo $c
e=$(b 李四 4)
echo $e
f=$(b 王五 2)
echo $f[root@pc1 ~]# sh sh
工资结果如下
张三工资为:6200
李四工资为:6400
王五工资为:6200
3、乘法运算
[root@pc1 ~]# vi sh
#!/bin/bash
a () {
echo $[ $1 * $2 ]
}
if [ $# -eq 2 ]
then b=$(a $1 $2)
echo "结果为:$b"
else echo "格式应为: sh $0 $1 $2"
fi[root@pc1 ~]# sh sh 10 20
结果为:200[root@pc1 ~]# sh sh 10 20 30
格式应为: sh sh 10 20
4、作用范围
local是用来将变量指定为局部变量,不在全局脚本中生效
[root@pc1 ~]# vi sh
#!/bin/bash
a () {
local b=10
echo "$b"
}
b=20
echo "$b"
a[root@pc1 ~]# sh sh
20
10
5、计算阶乘
[root@pc1 ~]# vi sh
#!/bin/bash
a () {
if [ $1 = 1 ]
then echo 1
else
local b=$[ $1 - 1 ]
local c=$(a $b)
echo $[ $c * $1 ]
fi
}
echo 例:计算阶乘5的结果为5!=5x4x3x2x1=120
read -p "输入要计算阶乘的数值:" e
c=$(a $e)
echo 计算的结果为:"$c"[root@pc1 ~]# sh sh
例:计算阶乘5的结果为5!=5x4x3x2x1=120
输入要计算阶乘的数值:5
计算的结果为:120
6、筛选目录和文件
筛选出某目录及子目录下包含目录及文件
[root@pc1 ~]# vi sh
#!/bin/bash
a () {
for b in `ls $1`
do
if [ -d "$1/$b" ]
then echo 子目录:"$b"
a "$1/$b"
else
echo 文件:"$b"
fi
done
}
echo "$1"目录及子目录下包含有:
a "$1"[root@pc1 ~]# sh sh 目录
二、数组
1、表示方法
a=(1 2 3 4 5)
或
a=([1]=10 [2]=30 [3]=30)
或
b="1 2 3 4 5"
a=($b)
或
a[1]=10
a[2]=20
a[3]=30
或
read -a a
1 2 3 4 5
2、使用方法
显示数组值
echo ${a[*]}
或
echo ${a[@]}显示数组长度
echo ${#a[*]}
或
echo ${#a[@]}显示某位数组的值(第一个数组为0位)
echo ${a[位数]}显示范围数组的值(第一个数组为0位)
echo ${a[@]:起始位数:结束位数}数组替换(echo只是将输出内容修改并不是真正修改了数组的值,第一个数组为0位)
echo ${a[@]/第几个数组/替换内容}
或
a[第几个数组]=替换内容数组删除(第一个数组为0位)
unset a[要删除数组的位数]
3、使用数组的某个值
[root@pc1 ~]# vi sh
#!/bin/bash
a () {
echo 参数为:"$@"
b=$1
echo 输出为:"${b[*]}"
}
c=(1 2 3 4 5)
echo 初始为:"${c[*]}"
a $c[root@pc1 ~]# sh sh
初始为:1 2 3 4 5
参数为:1
输出为:1
4、使用整个数组
[root@pc1 ~]# vi sh
#!/bin/bash
a () {
b=("$@")
echo 输出为:"${b[*]}"
}
c=(1 2 3 4 5)
echo 初始为:"${c[*]}"
a "${c[*]}"[root@pc1 ~]# sh sh
初始为:1 2 3 4 5
输出为:1 2 3 4 5
5、冒泡排序
从小到大排序(从大到小排序将-gt改为-lt)
[root@pc1 ~]# vi sh
#!/bin/bash
read -p "输入数组:" b
a=($b)
for i in `seq 0 ${#a[@]}`
do
for((j=i+1;j<${#a[@]};j++))
do
if [[ ${a[${i}]} -gt ${a[${j}]} ]]
then c=${a[${i}]}
a[${i}]=${a[${j}]}
a[${j}]=${c}
fi
done
done
echo 从小到大排序
echo 排序后为:${a[@]}[root@pc1 ~]# sh sh
输入数组:3 2 1
排序后为:1 2 3或
[root@pc1 ~]# vi sh
#!/bin/bash
read -p "输入数组:" b
a=($b)
for ((c=1;c<${#a[*]};c++))
do
for ((d=0;d<${#a[*]}-$c;d++))
do
if [ ${a[d]} -gt ${a[$(($d+1))]} ]
then e=${a[d]}
a[d]=${a[(($d+1))]}
a[(($d+1))]=$e
fi
done
done
echo 从小到大排序
echo 排序后为:${a[*]}[root@pc1 ~]# sh sh
输入数组:3 2 1
排序后为:1 2 3
结语
数组是多个数值的集合,其中的每一个数值都称为元素,函数在定义时不能指明参数,但是在调用时可以传递参数
版权声明:本文为CSDN博主「1风天云月」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/le616616/article/details/123077125
Linux系统配置(shell函数与数组)相关推荐
- linux shell 字符串 数组,bash shell函数返回数组字符串
#!/bin/bash # script:getselfvar.sh # 每个脚本中都在末尾追加了一段特殊的域名ip序列,需要将这段序列存放到数组变量中,供 # 脚本使用,例子中的ip和域名是处理过的 ...
- Shell 函数、数组与正则表达式
防伪码:白日依山尽,黄河入海流. 5.1 函数 格式: func() { command } 示例 1: #!/bin/bash func() { echo "This is a func ...
- linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学...
摘要 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高. 高级语言都支持函数,Shell也不例外.今天就为大家介绍下Shell中函数相关用法. 函数可以将一个复杂功能划 ...
- shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令)
文章目录 shell函数 了解函数 函数定义 递归函数 举例子 shell数组 定义数组 数组包括的数据类型与数组操作 数组操作 举例(快速创建数组.奇数数组) 冒泡排序法 调试命令 set命令 ba ...
- linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)
2011年12月19日,参考网上用C语言实现的快速排序,经过一番修改后,用shell(我的测试环境为centos5的bash-v3.x)实现了相同功能:对数组进行升序排序. 注:如果代码框里的代码复制 ...
- Linux常用Shell函数参数
函数参数 传递给函数使用的值称为函数的参数 传递参数给函数:在函数名后面以空白分隔给定参数列表即可,如:testfunc arg1 arg2 - 在函数体中当中,可使用$1, 2,...调用这些参数: ...
- Linux centosVMware shell中的函数、shell中的数组、
一.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function _name() { command ...
- linux shell脚本传数组参数,shell脚本----函数和数组
目录 一.shell函数 1.简介 2.格式 3.函数调用 4.示例演示 5.递归函数 二.shell数组 1.数组 2.Shell 数组的定义 3.获取数组元素 4.元素切片,替换,删除 5.示例演 ...
- shell中的函数、shell中的数组、 告警系统需求分析
为什么80%的码农都做不了架构师?>>> 20.16/20.17 shell中的函数 shell中的函数 说明:函数就是子shell, 是一个代码段,定义完函数就可以引用它. ...
- shell变量、函数和数组以及字符串的截取
一.变量 1.shell变量名 (1)可以由字母.数字.下划线等字符组成.但是第一个字符必须是字母或者下划线. (2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.ta ...
最新文章
- RRC Connection Reconfiguration
- 引才125人!博士副处级待遇,硕士正科级,全部事业编​!限这些高校……
- P_C_Brules
- C 数据结构之十大排序
- netty系列之:channelPipeline详解
- raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1366, u
- 免费时代的4种销售方式
- oracle怎么判断地址相似,如何查看oracle数据文件的地址
- VisualStudioCode常用快捷键
- 转DateTimePicker 控件的使用
- 记录一下我的蓝牙遥控小车
- 用友U8去除凭证外部凭证标记
- python对数据求均值_利用Python读取json数据并求数据平均值
- dex文件解析(第三篇)
- CodeLite 16.0可以编译通过,但是在编辑器界面会显示找不到标准库头文件
- java高级计算器_高级计算器[Java版]
- 微分积分电路及其波形转换
- 你坐飞机时可能意识不到,AI已经全流程为你保驾护航
- CSU 1726: 你经历过绝望吗?两次!
- javaweb-异步请求AjaxaxiosJSON