上篇博客已经分析重温了shell的运行方式以及其中的变量还有字符串,之后按照套路就是数组方面了,废话不多说,直接进入正题哈。(小白笔记,各位看官勿喷。。。)

    bash shell呢,支持一位数组,不支持多维数组,并且没有限定数组的大小,类似于C语言,元素的下标由0开始编号,下表可以是整数或者算术表达式,其值应大于或者等于0,在shell中用括号来表示数组,数组中的元素用空格来分割开来。定义数组的一般形式为:

数组名=(值1 值2 ... 值n)

    例如:

array_name=(value0 value1 value2 value3)

    或者:

array_name=(
value0
value1
value2
value3
)

    还可以单独定义数组中的各个元素:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

    定义晚了数组之后就要开始使用了,首先就是读取:

${数组名[下标]}

    例如:

valuen=${array_name[n]}

    使用@符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

    还有就是获取我们定义的数组的长度了:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

    好了,现在数组也定义了,长度也能获取了,接下来,理所应当必须是各种循环来处理数组啊。。。

    先来一个if判断的语法格式开开胃:

if condition
then
command1
command2
...
commandN
else
command
fi

    既然都有if判断了,那么elseif也同样:

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

    下面就给大家来个实例了:

a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi

    输出的结果为:

a 小于 b

    既然都说到这里了,再跟大家介绍一个比较实用的,test(用于检测某个条件是否成立,可以进行数值,字符和文件三个方面的检测,后文会有详解):

num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi #输出结果:两个数字相等

    接下来就是重头戏了,for循环和while循环:

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

    写成一行就是:

for var in item1 item2 ... itemN; do command1; command2… done;

    下面来一个实例哈:

for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done

    输出的结果就是:

The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

    for循环还可以顺序输出字符串来着:

for str in 'This is a string'
do
echo $str
done

    结果就是:

This is a string

    然后呢就是while循环的格式了:

while condition
do
command
done

    看一下实例哈(其中使用了let命令,它用于执行一个或者说多个表达式,变量计算中不需要加上$来表示变量):

#!/bin/sh
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done

    这就是结果输出:

1
2
3
4
5

    while呢,还可以用于读取键盘信息,下面这个实例中,输入信息设定为变量FILM,按下Ctrl+d键结束:

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done

    输出的结果为:

按下 <CTRL-D> 退出
输入你最喜欢的网站名:朋恋冉曲
是的!朋恋冉曲 是一个好网站

    再来的话就是无限循环了:

while :
do
command
done

    或者嘞:

while true
do
command
done

    还有就是:

for (( ; ; ))

    然后呢就是until循环了:

    官方解释就是:


until循环执行一系列命令直至条件为真时停止。

until循环与while循环在处理方式上刚好相反。

一般while循环优于until循环,但在某些时候—也只是极少数情况下,until循环更加有用。

条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次—请注意这一点。

语法格式就是:

until condition
do
command
done

    有了循环,我们当然要结束这个循环了,php中是break和continue,在shell中也是一样,接下来实例附上:

#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done

    执行以上代码,输出的结果为:

输入 1 到 5 之间的数字:3
你输入的数字为 3!
输入 1 到 5 之间的数字:7
你输入的数字不是 1 到 5 之间的! 游戏结束

   

#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done

    运行代码你就会发现,当输入大于5的数字时,循环不会结束,语句echo "游戏结束"永远不会被执行。

    顺道再提一个case多选择语句,它可以用来匹配一个值或者一个模式,当匹配成功,会执行相应的代码,其格式为:

case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac

    下面实例是提示输入一到四,于每一种模式进行匹配:

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;

    运行上面的代码,随着输入的值的不同,会有不同的返回值,例如:

输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3

    好啦,今天的笔记就到这里了,以后的,会持续接上。。。

    再啰嗦一下,本人纯属小白自学,各位看官千万勿喷哈。。。

  原文链接:https://blog.csdn.net/luyaran/article/details/79360914

shell重温---基础篇(shell数组&数组操作)的更多相关文章

  1. shell重温---基础篇(参数传递&echo命令)

    经过前两天的学习,关于shell的基础算是知道的一般般啦,最起码不算是小白了(纯属意淫).今天就来点干货哈.   首先是运行shell脚本时的参数传递.脚本内获取参数的格式为$n.n代表了一个数字,例 ...

  2. shell重温---基础篇(shell变量&字符串以及git GUI运行shell脚本方式)

    既然是基础篇那肯定是需要对shell的各种需要注意的基本点进行说明了.接下来就是show time...    shell呢,是一个用C语言编写的应用程序,是用户使用linux的桥梁.所以呢,他既是一 ...

  3. shell重温---基础篇(函数操作)

        linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.shell中函数的定义格式如下: [ function ] funname [()] { action; [ret ...

  4. shell重温---基础篇(连接数据库)

    前几天分享了shell字符串操作,数组操作等,接下来回归到项目,进行数据库操作.按照一般情况来说,shell连接数据库基本上都是DB使用的,因为需要运行大量的sql啊什么的,所以都会封装到shell中 ...

  5. shell重温---基础篇(流程控制&if判断&for&while&循环操作)

        和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { search( ...

  6. shell重温---基础篇(文件包含)

        和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件.Shell 文件包含的语法格式如下: . filename # 注意点号(.)和文件名中间 ...

  7. shell重温---基础篇(printf命令&test命令)

    在shell中还有一个输出的命令,那就是printf了.它模仿的是C程序库(library)里的printf()程序,是由POSIX标准所定义,所以嘞,使用printf脚本比echo移植性要好一点,它 ...

  8. shell重温---基础篇(输入/输出重定向)

        大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准 ...

  9. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

随机推荐

  1. 【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取

    从这篇开始学习Spring的JDBC,为了了解Spring对于JDBC的作用,先通过JDBC传统的流程,实现一个数据库的插入和读取. 从这篇你可以了解到: 1 传统的JDBC插入和读取的过程. 2 如 ...

  2. java之大文件断点续传

    针对某些场景下,面对服务文件大,或者服务端服务器不稳定时使用该模块.功能代码如下: import java.io.File; import java.io.FileOutputStream; impo ...

  3. Oracle彻底杀掉进程

    kill session 是DBA经常碰到的事情之一.如果kill 掉了不该kill 的session,则具有破坏性,因此尽可能的避免这样的错误发生.同时也应当注意,如果kill 的session属于 ...

  4. python入门17 类和对象

    类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处)  成员变量(self.变量) 类的方法( @classmethod,cls参数)   成员方法( self参数 )  静态方法 ...

  5. 【转载】#458 Errors While Converting Between enum and Underlying Type

    You can convert to an enum value from its underlying type by casting the underlying type (e.g. int) ...

  6. Codeforces Round #521 (Div. 3) D. Cutting Out 【二分+排序】

    任意门:http://codeforces.com/contest/1077/problem/D D. Cutting Out time limit per test 3 seconds memory ...

  7. 2018中国大学生程序设计竞赛 - 网络选拔赛 1001 - Buy and Resell 【优先队列维护最小堆+贪心】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438 Buy and Resell Time Limit: 2000/1000 MS (Java/O ...

  8. centos7 编译安装nginx1.16.0( 完整版 )

    一.安装依赖包 yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 依赖包说明: 1.编译 ...

  9. c语言实现数组的转置

    #include<stdio.h> int main (){ int i,j,m,n; ][],b[][]; printf("请输入行列式的行数:\n"); scanf ...

  10. 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2939 本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了. 所以多 ...