首页 > 其他分享 >2.索引数组和关联数组,求随机数,递归调用

2.索引数组和关联数组,求随机数,递归调用

时间:2023-05-21 18:36:02浏览次数:34  
标签:数组 递归 echo 随机数 ARRAY root rocky8 NAME

总结索引数组和关联数组,字符串处理,高级变量使用及示例。

数组

1.数组介绍

变量:存储单个元素的内存空间

数组;存储多个元素的连续的内存空间,相当于多个变量的集合。

数组名和索引

索引的编号从0开始,属于数组索引

索引支持自定义的格式,而不仅是数值格式,即为关联索引。

Bash的数组支持稀疏格式(索引不连续)

2.声明数组

#普通数组可以不声明,直接使用

declare -a ARRAY_NAME

#关联数组必须先声明,后使用

declare -A ARRAY_NAME

注意:#两种类型的数组不相互转换

3.数组赋值

(1)一次只赋值一个元素

ARRAY_NAME[INDEX]=VALUE

(2)一次赋值多个元素

ARRAY_NAME=("VAL1" "VAL2"...)

title=(ceo coo cto)

num=({1..10})

alpha=({a..z})

file=(*.txt)

(3)只赋值特定元素

ARRAY_NAME=([0]="VAL1" [3]="VAL2"...)

(4)交互式赋值

read -a ARRAY

  1. 显示所有数组

declare -a

  1. 引用数组

#引用数组中某个元素

${ARRAY_NAME[INDEX]}

#如果省略[INDEX]表示引用下标为0的元素

#引用数组所有元素

${ARRAY_NAME[*]}

${ARRAY_NAME[@]}

#输出数组长度

${#ARRAY_NAME[*]}

${#ARRAY_NAME[@]}

6删除数组

unset ARRAY_NAME[INDEX] 删除数组中某个元素

unset ARRAY_NAME 删除整个数组

7数组数据处理

数组切片

${ARRAY_NAME[@]:offset:number}

${ARRAY_NAME[*]:offset:number}

offset 要跳过的元素个数

number 要取出的元素个数

#取偏移后的所有元素

${ARRAY_NAME[@]:offset}

${ARRAY_NAME[*]:offset}

8.关联数组

关联数组必须先声明,再调用

declare -A ARRAY_NAME

ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2'...)

ARRAY_NAME[idx_name3]='val3'

9.字符处理

基于偏移量取字符串

返回字符串变量var的字符的长度,一个汉字/字母算一个字符

${#var}

[root@rocky8~]# str='jkdsfjgj'

[root@rocky8 ~]# echo $str

jkdsfjgj

[root@rocky87 ~]# echo ${#str}

10.基于模式取子串

从左往右,查找var变量所存储的字符串中,删除字符串开头到第一次出现word字符的部分(包含word字符串),即懒惰模式,即非贪婪模式

${var#*word}

与其对应的贪婪模式

${var##*word}

从var变量的字符串中删除以word开头的部分

${var#word} 与其对应的贪婪模式${var##word}

[root@rocky8 ~]# echo $var

qwer1234

[root@rocky8~]# echo ${var#qw}

er1234

[root@rocky8~]# echo ${var#w}

qwer1234

从右往左,查找var变量所存储的字符串中,删除字符串从最后开始到第一次出现word字符的部分(包含word字符串),即懒惰模式,即非贪婪模式

${var%word*}

与其对应的贪婪模式

${var%%word*}

[root@rocky8 ~]# echo ${str}

abcdefg

[root@rocky8 ~]# echo ${str#*cd}

efg

[root@rocky8 ~]#

[root@rocky8~]# echo ${str%%cd*}

ab

[root@rocky8 ~]#

从var变量的字符串中删除以word结尾的部分

${var%word} 与其对应的贪婪模式${var%%word}

[root@rocky8 ~]# echo $var

qwer1234

[root@rocky8 ~]# echo ${var%34}

qwer12

[root@rocky8 ~]# echo ${var%3}

qwer1234

[root@rocky8 ~]#

11.高级变量

高级变量赋值

有类型变量

Shell变量一般是无类型的,但是bash shell提供了declare和typese两个命令用于指定变量的类型,两个命令是等价的。

变量间接引用。

eval命令:eval命令首先扫描命令行所有的置换,然后再指定该命令行

[root@rocky8~]# cmd=whoami

[root@rocky8~]# eval $cmd

root

[root@rocky8~]# n=10;echo {1..$n}

{1..10}

[root@rocky8~]# n=10;eval echo {1..$n}

1 2 3 4 5 6 7 8 9 10

间接变量应用

如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值称之为变量引用。

求10个随机数的最大值与最小值。

then max=$num;min=$num;fi;echo -n $num ' ' ;if [[ $num -gt $max ]];then max=$num;elif [[ $num -lt $min ]];then min=$num ;fi;done;echo "中最大值为 $max ;最小值为 $min"

401 32637 6892 3874 11127 8376 9434 9433 22265 2076 中最大值为 32637 ;最小值为 401

使用递归调用,完成阶乘算法实现

fact() { if [ $1 -eq 0 -o $1 -eq 1 ] ;then echo 1;else echo $[$1*$(fact $[$1-1])] ;fi };fact 8

标签:数组,递归,echo,随机数,ARRAY,root,rocky8,NAME
From: https://www.cnblogs.com/m490545607/p/17418951.html

相关文章

  • php 操作数组 (合并,拆分,追加,查找,删除等)
    1.合并数组array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为:Php代码1.arrayarray_merge(array这个函数将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组......
  • 函数传参类型为数组时,int*和char*的区别
    1.现象(1)假设有一个int型数组,我们先用int*给函数传参#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidtest(int*arr){ arr[1]=8;}intmain(){ intarr[]={7,3,4,6,8,9,1,5,2,10};test(arr); printf("%d\n",arr[0]); printf("%d",arr......
  • java 递归拼接树形结构代码
    1、json数据(目标)[{label:'一级1',children:[{label:'二级1-1',children:[{label:'三级1-1-1'}]}]},{label:'一级2'......
  • Java接口自动化-excel中参数化随机数-反射
    1.最近在想到一个提高档次的一个参数化随机数的方法:反射场景:一般真实的测试数据不会写在excel表中,都是以${}的格式表示,对应的测试数据是写在了项目的properties或者yaml文件中。2.例如:注册,登录场景,随机生成手机号(1).excel设计随机参数:上图随机参数手机号是${generatePhone......
  • 构建乘积数组
    classSolution{public:vector<int>multiply(constvector<int>&nums){intn=nums.size();if(n==0)returnvector<int>();vector<int>q(n,1);for(inti=1,t=nums[0];i<n;i++)//t记录前......
  • 一维 数组
    /*数组什么是数组:就是帮助我们更好的管理和使用数据数组的作用:帮助我们存储一组相同类型的数据数据的定义:类型名变量名[数字]括号里的数字表示:当前这个数组能够帮助我们存储的数据个数*///一维数组初始化第一种方式#include<stdio.h>intmain(){ ......
  • 类 方法中实现查找某元素是否在数组中的操作
    publicclassImoocStudent{publicbooleancontains(int[]arr,intelement){booleanresult=false;for(intvalue:arr){if(value==element){result=true;break;}......
  • Uva--699 The Falling Leaves,(二叉树的递归遍历)
    记录10:462023-5-20http://uva.onlinejudge.org/external/6/699.htmlreference:《算法竞赛入门经典第二版》例题6-10二叉树的层次遍历,边读边写(这些题给我感觉是非常灵活),对每个节点需要的数据就是在sum数组的位置#include<cstdio>#include<iostream>#include<sstream>#d......
  • #yyds干货盘点# LeetCode程序员面试金典:将有序数组转换为二叉搜索树
    题目:给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。 示例1:输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9]......
  • ES6 常见的数组遍历方法
           ......