linux下Bash编程之数组Array详解

1.Array数组与变量概念与区别

变量是一段内存空间,并且变量与变量之间是多数是不连续的内存空间

Array数组是由多个变量组成,数组中的变量称为元素,数组中的元素是连续的内存空间

2.声明数组

declare -a 数组名

例如:声明一个数组STU并初始化值

写法1:

declare -a STU

STU[0]=Willow

STU[1}=Tom

STU[2]=Redhat

写法2:

STU=(Willow Tom Redhat) #元素之间用空格隔开,元素从0开始依次赋值,不能跳跃

写法3:

STU=([0]=Willow [1]=Tom [2]=Redhat)

STU=([0]=Willow [1]=Tom [5]=Redhat) #元素可以跳跃赋值,第2,3,4元素则为空值

3.数组属性

3.1.计算数组当中指定元素的字符长度:

${#STU[0]}表示数组STU中的第1个元素的长度

${#STU[1]}表示数组STU中的第2个元素的长度

3.2.计算数组当中元素的个数

${#STU[*]}

${#STU[@]}

4.实验.将指定数组内的最大值取出来,如下脚本:

#!/bin/bash

#

ARRAY=(23 15 66 88 54 110 686 336 2 256)

declare -i MAX=${ARRAY[0]}

INDEX=$[${#ARRAY[*]}-1]

for I in `seq 1 $INDEX`; do

if [ $MAX -lt ${ARRAY[$I]} ]; then

MAX=${ARRAY[$I]}

fi

done

echo "ARRAY_MAX is $MAX"

5.实验,利用RANDOM随机生成数组,并将数组内的最大值取出来,如下脚本:

#!/bin/bash

#

echo -n "ARRAY is  "

for I in {0..9}; do

ARRAY[$I]=$RANDOM

echo -n "${ARRAY[$I]} "

done

echo

declare -i MAX=${ARRAY[0]}

INDEX=$[${#ARRAY[*]}-1]

for I in `seq 1 $INDEX`; do

if [ $MAX -lt ${ARRAY[$I]} ]; then

MAX=${ARRAY[$I]}

fi

done

echo "ARRAY_MAX is $MAX"

6.实验,随机取出指定数组中的一个元素,如下脚本:

#!/bin/bash

#

STU=(Tom Willow Jerry Cruo Xbei Roony Yibu)

#STU=([0]=Tom [1]=Willow [2]=Jerry [3]=Cruo [4]=Xbei [5]=Roony [6]=Yibu)

INDEX=$[$RANDOM%7]

echo ${STU[$INDEX]}

7.随机生成一个数组,并将数组内的元素从小到大排序,如下脚本:

#

echo -n "ARRAY is  "

for I in {0..9}; do

ARRAY[$I]=$RANDOM

echo -n "${ARRAY[$I]} "

done

echo

INDEX=${#ARRAY[*]}

for (( i=0; i < $INDEX; i++ )); do

for (( j=$i; j< $INDEX; j++ )); do

if [ ${ARRAY[$i]} -gt ${ARRAY[$j]} ]; then

TEMP=${ARRAY[$i]}

ARRAY[$i]=${ARRAY[$j]}

ARRAY[$j]=$TEMP

fi

done

done

echo -n "ARRAY Sorted is : "

for ((i=0;i < $INDEX; i++)); do

echo -n "${ARRAY[$i]} "

done

echo

8.自定义生成指定数组元素个数,并且数组内的元素不能相同,并将其显示出来,如下脚本:

#!/bin/bash

#

read -p "The element number[1-50]: " ELENUM

declare -a ARRAY

function COMELE {

local I

for I in `seq 0 $[${#ARRAY[*]}-1]`; do

if [ $1 -eq ${ARRAY[$I]} ]; then

return 1

fi

done

return 0

}

for I in `seq 0 $[$ELENUM-1]`; do

while true; do

ELEMENT=$[$RANDOM%30];

COMELE $ELEMENT

if [ $? -eq 0 ]; then

break

fi

done

ARRAY[$I]=$ELEMENT

echo  "${ARRAY[$I]}"

done

9.getopts命令:是bash内置命令

:代表参数后面必须有内容

OPTARG:获取短选项后面的内容

OPTIND:获取命令最后一个参数

新建opttest简单脚本,接受短选项-b或-d,了解getopts命令的用法

vim opttest.sh

while getopts ":b:d:" SWITCH; do

case $SWITCH in

b) echo "The option is b."

echo $OPTARG

echo $OPTIND;;

d) echo "The option is d."

echo $OPTARG

echo $OPTIND;;

\?) echo "Usage: opttest.sh [-d ARGS] [-b ARGS]" ;;

esac

done

./optest.sh -b "OK" -d "Good"  #执行显示结果如下:

[[email protected] sh]# ./opttest.sh -b "OK" -d "Good"

The option is b.

OK

3

The option is d.

Good

5

[[email protected] sh]#

10.制作一个创建新脚本模版的脚本文件,可自动生成脚本初期必要写的内容:

比如#!/bin/bash,描述信息,创建时间,如果创建的脚本存在,则只需编辑;如果创建的脚本不存在,

则创建模版脚本等信息

#!/bin/bash

# Name:mkscript

# Description: Create script

# Author: Willow

# Version: 0.0.1

# Datetime: 06/14/2016 08:53:00

# Usage: mkscript FILENAME

#以下这段脚本,利用getopts命令,获取-d 选项信息

while getopts ":d:" SWITCH; do

case $SWITCH in

d) DESC=$OPTARG;;

\?) echo "Usage: mkscript [-d DESCRIPTION] FILENAME" ;;

esac

done

shift $[$OPTIND-1]

#以下这段脚本,创建新脚本文件必须内容

if ! grep "[^[:space:]]" $1 &> /dev/null; then

cat > $1 << EOF

#!/bin/bash

# Name: `basename $1`

# Description: $DESC

# Author: Willow

# Version: 0.0.1

# Datetime: `date +%F-%T`

# Usage: `basename $1`

EOF

fi

vim + $1

#以下这段脚本,如果脚本语法有错误,按提示返回编辑修改

until bash -n $1 &> /dev/null; do

read -p "Syntax error,q|Q for quiting,else for editing: " OPTIONS

case $OPTIONS in

q|Q)

echo "Quiting..."

exit 8 ;;

*)

vim + $1 ;;

esac

done

chmod +x $1

时间: 2024-10-13 07:02:31

linux下Bash编程之数组Array详解的相关文章

Linux下Bash编程之算术运算符详解(三)

shell算术运算表示如下: 1.let 算术运算表达式 let C=$A+$B 2.$[算术运算表达式] C=$[$A+$B] 3.$((算术运算表达式)) C=$(($A+$B)) 4.expr 各操作数及运算符之间要有空格,且要使用命令引用 C=`expr $A + $B` 举例说明: 1.指定一个用户,判断用户密码剩余使用期限是否已经小于警告期限: 如果小于警告期限,则显示"Password will expire --> Warning":否则,就显示"OK&

linux下Bash编程组合测试及编写脚本(五)

linux下Bash编程组合测试及编写综合脚本(五) 1.Bash编程组合测试条件 -a: 与关系 -o: 或关系 !: 非关系 表示方法1:[ $# -gt 100 -a $# -le 500 ] 表示方法2:[ $# -gt 100 ] && [ $# -le 500 ] 2.编写一个任意添加与删除用户的脚本,要求如下: 2.1:如果脚本选项是--add:,将添加用户; 如果选项是--del,将删除用户,如果是--help显示帮助信息 2.2:脚本选项后面的参数可任意指定多个用户并且用

linux下Bash编程循环语句特殊用法之编写脚本(十)

linux下Bash编程while语句特殊用法之编写脚本(十) 1.循环控制: break:中断整个循环语句,即退出循环后执行脚本后面的语句 continue:中断当前本次循环,提前进入下一轮循环 exit:结束脚本运行 2.while死循环,即当不知道循环多少次时 格式 : while :; do 循环语句 done 3.while从输入重定向文件中每行读取并赋值给read变量 格式:  while read LINE;do 循环语句 done < 路径文件 4.实例脚本 4.1.找出/etc

Linux下同步工具inotify+rsync使用详解

Linux下同步工具inotify+rsync使用详解 Posted on 2014-12-12 |  In Linux|  9|  Visitors 438 1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的"Rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行Rsync serve

LINUX下ORACLE相关的内核参数详解

ORACLE相关的内核参数详解 1.kernel.sem [[email protected] ~]# cat /proc/sys/kernel/sem 250         32000    100         142 [[email protected] ~]#  ipcs -sl ------ Semaphore Limits -------- max number of arrays = 142 max semaphores per array = 250 max semaphor

linux下find(文件查找)命令的详解

文件查找命令locate和find详解 locate 配合数据库缓存,快速查看文件位置,非实时查找( 数据库查找) find 实际搜寻硬盘查询文件名称 ,实时查找 locate简介 locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息.Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件.为了避免这种情况,可以在

Linux下安装Hadoop(2.7.1)详解及WordCount运行

一.引言 在完成了Storm的环境配置之后,想着鼓捣一下Hadoop的安装,网上面的教程好多,但是没有一个特别切合的,所以在安装的过程中还是遇到了很多的麻烦,并且最后不断的查阅资料,终于解决了问题,感觉还是很好的,下面废话不多说,开始进入正题. 本机器的配置环境如下: Hadoop(2.7.1) Ubuntu Linux(64位系统) 下面分为几个步骤来详解配置过程. 二.安装ssh服务 进入shell命令,输入如下命令,查看是否已经安装好ssh服务,若没有,则使用如下命令进行安装: sudo

Linux 下PS1 PS2 PS3 PS4 提示符详解

很多人在用Linux时,对提示符都不太注重,能够利用好提示符可更直观地查看,利于自己的判断 Linux下有PS1 PS2 PS3 PS4 四类提示符,这四个变量都是环境变量,至于系统里有哪些环境变量,可使用命令 "env"来查看 PS1命令提示符 PS1有那些配置,或者说PS1里头都能配置些命令提示符的什么东西: \d :代表日期,格式为weekday month date,例如:"Mon Aug 1" \H :完整的主机名称.例如:我的机器名称为:fc4.linu

Linux下各种后门和日志工具详解

攻入Linux系统后,很多入侵者往往就开始得意忘形了.这其中还有一个原因,就是技术性也要求更高了.下面,我们来看看一些常用的经典工具. 1.从这里延伸:后门和连接工具 (1)Httptunnel Tunnel的意思是隧道,通常HTTPTunnel被称之为HTTP暗道,它的原理就是将数据伪装成HTTP的数据形式来穿过防火墙,实际上,它是在HTTP请求中创建了一个双向的虚拟数据连接来穿透防火墙.说得简单点,就是说在防火墙两边都设立一个转换程序,将原来需要发送或接受的数据包封装成HTTP请求的格式骗过