数组和case语句

1、数组

1.1 数组分类

普通数组:只能使用整数作为数组索引(元素的下标)
关联数组:可以使用字符串作为数组索弓|(元素的下标)

1.2 普通数组定义

一次赋予一个值

数组名[索引下标],下标从0开始
arrya[0]=v1
arrya[1]=v2
arrya[2]=v3

一次赋予多个值

数组名=(值1 值2 值3 ...)
array=(var1 var2 var3 var4)

array1=(`cat /etc/passwd`) 将文件中每一行(或者空格为分隔符)赋值给array1数组
array2=(`ls /root`) 
array3=(harry fl jack "Miss Liao")
array4=(1 2 3 4 "he11o world" [10]=linux) # [10]=linux 表示下标为10的元素为linux

1.3 数组的读取

${数组名[元素下标]}

echo ${array[0]}	获取数组里第一个元素
echo ${array[*]}	获取数组里的所有元素
echo ${#array[*]}	获取数组里所有元素个数

echo ${!array[@]}	获取数组元素的索引下标
或者
echo ${!array4[*]}

echo ${array[@]:1:2}	访问指定的元素; 1代表从下标为1的元素开始获取; 2代表获取后面几个元素
或者
echo ${array[*]:1:2}	

1.4 关联数组定义

声明关联数组

declare -A asso_array 	#asso_array表示关联数组

数组赋值

一次赋一个值

数组名[索引或者下标]=变量值
asso_array[linux]=one

一次赋多个值

asso_array=([name1]=fl [name2]=feng [name3]=lei)

查看关联数组

declare -A

关联数组的查看

echo ${asso_array[name1]}
fl
declare -A books
let books[Shell]++
declare -A

declare -A books='([Shell]="1" )' 
# 让关联数组中不存在的下标进行++操作,默认从0开始

1.5 案例

统计web服务的不同连接状态的个数

#!/bin/env bash

#定义一个关联数组
declare -A array
#统计每个状态的个数
states=`ss -atp | grep 80  | cut -d '  -f1` #获取每个连接的状态
for i in $states
do
    let array[$i]++
done

#通过遍历数组里的索引和元素打印出来
for j in ${!array[@]}
do
    echo $j:${array[$j]}
done

2、case语句

2.1 语法结构

说明:pattern表示需要匹配的模式

case var in		定义变量; var代表变量名
	pattern 1)	模式1;|分割多个模式, 相当于or 例如: hello|world) 匹配hello或者world
	command1	需要执行的语句
	;;			两个分号代表命令结束
	pattern 2)		
	command2
	;;		
	pattern 3)		
	command3
	;;	
	*)		default,不满足以上模式,默认执行*)下面的语句
	command4
	;;
esac			esac表示case语句结束

2.2 案例

例1:当给程序传入start、 stop、 restart三个不同参数时分别执行相应命令

#!/bin/env bash

case $1 in
    start|S)
    service apache start &>/dev/null && echo "apache 启动成功"
    ;;
    stop|T)
    service apache stop &>/dev/null && echo "apache 停止成功"
    ;;
    reload|R)
    service apache restart&>/dev/null && echo "apache 重启完毕"
    ;;
    *)
    echo "请输入你要的动作"
    ;;
esac

例2:脚本提示让用户输入需要管理的服务名,然后提示用户需要对服务做什么操作,如启动,关闭等操作

#!/bin/env bash

read -p "请输入需要操作的服务:" service
case $service in
    vsftpd)
    read -p "请输出操作:" action
    case $action in
        start|S)
        service vsftpd start &>/dev/null && echo "$service服务已经启动"
        ;;
        stop|T)
        service vsftpd stop &>/dev/null && echo "$service服务已经停止"
        ;;
        reload|restart|R)
        service vsftpd restart &>/dev/null && echo "$service服务已经重启"
        ;;
    esac
    ;;
    httpd)
    echo "apache is running..."
    ;;
    *)
    echo "请输入需要管理的服务名称(vsftpd)"
    ;;
esac
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值