当前位置:首页 > linux基础 > 正文内容

Shell介绍(二)函数,数组

6年前 (2019-09-08)linux基础1006
函数
命令的集合 完成特定功能的代码块
模块化 复用
函数和变量类似 只有先定义才可以调用,如果只定义不调用 则不会执行
函数的定义和调用
三种方法:
[root@web scripts]# cat fun.sh
#!/bin/sh
test1(){
    echo "第一种函数定义方式"
}
function test2(){
    echo "第二种函数定义方式"
}
function test3 {
    echo "第三种函数定义方式"
}
test1
test2
test3


函数的传参 不能直接传参


1. 在函数名的后面跟参数

fun(){
    if [ -f $1 ];then
        echo "$1 is exsis"
    else
        echo "$1 is no ex"
    fi
}
fun $1


2. 全局配置 在函数的最上面 设置变量

[root@web scripts]# cat fun1.sh
#!/bin/sh
num=20
fun(){
for i in `seq $1`
do
    sum=$[num+i]
done
    echo $sum
}
fun $1


3. local 只在函数体内部生效

[root@web scripts]# cat fun1.sh
#!/bin/sh
fun(){
num=20
for i in `seq $1`
do
    sum=$[num+i]
done
    echo $sum
}
fun $1
数组
普通数组  只能以数字作为索引(下标)
关联数组  可以使用数字也可以使用字符串作为索引(下标)
数组名[索引]=值


定义普通数组


第一种定义方式

数组名[索引]=值
[root@web scripts]# array[0]=shell
[root@web scripts]# array[1]=Linux
[root@web scripts]# array[2]=MySQL
第二种定义方式 一次定义多个值
数组名=(值)
[root@web02 ~]# array=(shell mysql [20]=kvm [50]=test)
[root@web02 ~]# echo ${array[*]}
shell mysql kvm test
[root@web02 ~]# echo ${!array[*]}
0 1 20 50


如何查看值 查看某个索引的值

[root@web scripts]# echo ${array[2]}
MySQL
[root@web scripts]# echo ${array[1]}
Linux
[root@web scripts]# echo ${array[0]}
shell


查看所有的值

[root@web scripts]# echo ${array[*]}
shell Linux MySQL
[root@web scripts]# echo ${array[@]}
shell Linux MySQL


如何查看索引

[root@web scripts]# echo ${!array[*]}
0 1 2
[root@web scripts]# echo ${!arraytest[*]}
0 1 2 3 4
[root@web scripts]# echo ${arraytest[*]}
shell Linux Mysql kvm docker


案例: ping数组内的ip

[root@web scripts]# cat array.sh
#!/bin/sh
ip=(
10.0.0.7
10.0.0.8
10.0.0.254
10.0.0.1
)

for i in ${!ip[*]}
do
    ping -c 1 -W 1 ${ip[$i]}
done


普通数组

[root@web02 ~]# array[index1]=Shell
[root@web02 ~]# array[index2]=Linux
[root@web02 ~]# array[index3]=MySQL
[root@web02 ~]# echo ${array[*]}
MySQL
[root@web02 ~]# echo ${array[1]}

[root@web02 ~]# echo ${array[2]}

[root@web02 ~]# echo ${array[3]}

[root@web02 ~]# echo ${array[0]}
MySQL


如何定义关联数组

declare -A array
[root@web02 ~]# declare -A array
[root@web02 ~]# array[index1]=Shell
[root@web02 ~]# array[index2]=Linux
[root@web02 ~]# array[index3]=MySQL
[root@web02 ~]# echo ${array[index1]}
Shell
[root@web02 ~]# echo ${array[index2]}
Linux
[root@web02 ~]# echo ${array[index3]}
MySQL
[root@web02 ~]# echo ${array[*]}
Shell Linux MySQL
[root@web02 ~]# echo ${!array[*]}
index1 index2 index3


查看数组的长度

echo ${#array[*]}


遍历数组 三种方式

1. echo ${array[*]}   for循环
2. echo ${!array[*]}  使用索引遍历内容
3. echo ${#array[*]}  索引的个数遍历内容
[root@web02 ~]# let array[a]++
[root@web02 ~]# let array[a]++
[root@web02 ~]# let array[a]++
[root@web02 ~]# let array[a]++
[root@web02 ~]# let a++
[root@web02 ~]# let a++
[root@web02 ~]# echo $a
2
[root@web02 ~]# let b++
[root@web02 ~]# let b++
[root@web02 ~]# echo $b
2
[root@web02 ~]# let array[b]++
[root@web02 ~]# let array[b]++
[root@web02 ~]# let array[b]++
[root@web02 ~]# echo ${array[b]}
[root@web02 ~]# cat array.sh
#!/bin/sh
declare -A array
for i in `cat sex.txt`
do
    let array[$i]++
done
for i in ${!array[*]}
do
    echo "$i出现了 ${array[$i]}次"
done
案例2:
[root@web02 ~]# cat sex.txt
zs m
ls m
em f
alex m
ld m
oldboy f
bgx x
[root@web02 ~]# cat array.sh 
#!/bin/sh
declare -A array
while read line
do
    type=`echo $line|awk '{print $2}'`
    let array[$type]++
done<sex.txt
for i in ${!array[*]}
do
    echo "$i出现了 ${array[$i]}次"
done


案例3

[root@web02 ~]# cat array.sh 
#!/bin/sh
declare -A array
while read line
do
    let array[`echo $line|awk '{print $2}'`]++
done<sex.txt
for i in ${!array[*]}
do
    echo "$i出现了 ${array[$i]}次"
done

统计IP地址
[root@web02 ~]# cat array.sh
#!/bin/sh
declare -A array
while read line
do
    type=`echo $line|awk '{print $1}'`
    let array[$type]++
done</var/log/nginx/access.log
for i in ${!array[*]}
do
    echo "$i出现了 ${array[$i]}次"
done


“Shell介绍(二)函数,数组” 的相关文章

Linux基本权限

Linux基本权限

1.什么是权限我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权力。2.为什么要有权限因为系统中不可能只存在一个root用户,一定会存在多个用户,为了保护每个登陆用户的隐私和工作环...

rpm包管理

rpm包管理

RPM基础概述RPM全称RPM Package Manager缩写,由红帽开发用于软件包的安装,升级卸载与查询rpm包的命名规则一个rpm软件包的命名规则。bash-4.2.46-28.el7.x86_64.rpmname: 软件包名称version: 版本号, 主版本, 重大更新. 次版本, 子...

Linux-yum软件管理

Linux-yum软件管理

YUM基本介绍1.什么是YUMYum是RedHat以及CentOS中的软件包管理器。能够通过互联网下载 .rpm 包并且安装,并可以自动处理依赖性关系,无须繁琐地一次次下载、安装。2.YUM源是什么1要成功的使用 YUM 工具安装更新软件或系统,就需要有一个包含各种 rpm 软件包的reposito...

crond计划任务

crond计划任务1.什么是crondcrond就是计划任务,类似于我们平时生活中的闹钟。定点执行。2.为什么要使用crondcrond主要是做一些周期性的任务,比如: 凌晨3点定时备份数据。比如:11点开启网站抢购接口,12点关闭网站抢购接口。3.计划任务主要分为以下两种使用情况:1.系统级别的定...

Linux进程管理

Linux进程管理

进程概述1.当我们运行一个程序,那么我们将运行的程序叫进程。PS1: 当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限。PS2: 在进程运行的过程中,系统会有各种指标来表示当前运行的状态。2.程序和进程的区别1.程序是数据和指令的集合,是一个静态的概念。比如/bin/ls、/bi...

Rsync文件同步

Rsync文件同步

Rsync基本概述rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于Unix/linux/Windows等多种操作系统平台。Rsync简介rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有...