目录

前言

一、函数

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函数与数组)相关推荐

  1. linux shell 字符串 数组,bash shell函数返回数组字符串

    #!/bin/bash # script:getselfvar.sh # 每个脚本中都在末尾追加了一段特殊的域名ip序列,需要将这段序列存放到数组变量中,供 # 脚本使用,例子中的ip和域名是处理过的 ...

  2. Shell 函数、数组与正则表达式

    防伪码:白日依山尽,黄河入海流. 5.1  函数 格式: func() { command } 示例 1: #!/bin/bash func() { echo "This is a func ...

  3. linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学...

    摘要 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高. 高级语言都支持函数,Shell也不例外.今天就为大家介绍下Shell中函数相关用法. 函数可以将一个复杂功能划 ...

  4. shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令)

    文章目录 shell函数 了解函数 函数定义 递归函数 举例子 shell数组 定义数组 数组包括的数据类型与数组操作 数组操作 举例(快速创建数组.奇数数组) 冒泡排序法 调试命令 set命令 ba ...

  5. linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)

    2011年12月19日,参考网上用C语言实现的快速排序,经过一番修改后,用shell(我的测试环境为centos5的bash-v3.x)实现了相同功能:对数组进行升序排序. 注:如果代码框里的代码复制 ...

  6. Linux常用Shell函数参数

    函数参数 传递给函数使用的值称为函数的参数 传递参数给函数:在函数名后面以空白分隔给定参数列表即可,如:testfunc arg1 arg2 - 在函数体中当中,可使用$1, 2,...调用这些参数: ...

  7. Linux centosVMware shell中的函数、shell中的数组、

    一.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function _name() { command ...

  8. linux shell脚本传数组参数,shell脚本----函数和数组

    目录 一.shell函数 1.简介 2.格式 3.函数调用 4.示例演示 5.递归函数 二.shell数组 1.数组 2.Shell 数组的定义 3.获取数组元素 4.元素切片,替换,删除 5.示例演 ...

  9. shell中的函数、shell中的数组、 告警系统需求分析

    为什么80%的码农都做不了架构师?>>>    20.16/20.17 shell中的函数 shell中的函数 说明:函数就是子shell, 是一个代码段,定义完函数就可以引用它. ...

  10. shell变量、函数和数组以及字符串的截取

    一.变量 1.shell变量名 (1)可以由字母.数字.下划线等字符组成.但是第一个字符必须是字母或者下划线. (2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.ta ...

最新文章

  1. RRC Connection Reconfiguration
  2. 引才125人!博士副处级待遇,硕士正科级,全部事业编​!限这些高校……
  3. P_C_Brules
  4. C 数据结构之十大排序
  5. netty系列之:channelPipeline详解
  6. raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1366, u
  7. 免费时代的4种销售方式
  8. oracle怎么判断地址相似,如何查看oracle数据文件的地址
  9. VisualStudioCode常用快捷键
  10. 转DateTimePicker 控件的使用
  11. 记录一下我的蓝牙遥控小车
  12. 用友U8去除凭证外部凭证标记
  13. python对数据求均值_利用Python读取json数据并求数据平均值
  14. dex文件解析(第三篇)
  15. CodeLite 16.0可以编译通过,但是在编辑器界面会显示找不到标准库头文件
  16. java高级计算器_高级计算器[Java版]
  17. 微分积分电路及其波形转换
  18. 你坐飞机时可能意识不到,AI已经全流程为你保驾护航
  19. CSU 1726: 你经历过绝望吗?两次!
  20. javaweb-异步请求AjaxaxiosJSON

热门文章

  1. mysql源码分析——THD数据结构
  2. 中国名气黑客网站目录
  3. ScrollView嵌套Tablaout与ViewPager联动(标签)(ScrollView与ViewPager冲突)
  4. 路透社:大众与江淮计划在合肥投资50.6亿元建新电动汽车工厂
  5. css图片九宫格布局
  6. 如何使用pdf转换器
  7. 纯Javascript实现鼠标点击特效(烟花特效)
  8. JVMTM Tool Interface:JVM源码分析之javaagent原理完全解读
  9. android网络编程-socket基础
  10. Unity 做一个提示框,背景图片随文字改变大小