shell重温---基础篇(shell数组&数组操作)
上篇博客已经分析重温了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数组&数组操作)的更多相关文章
- shell重温---基础篇(参数传递&echo命令)
经过前两天的学习,关于shell的基础算是知道的一般般啦,最起码不算是小白了(纯属意淫).今天就来点干货哈. 首先是运行shell脚本时的参数传递.脚本内获取参数的格式为$n.n代表了一个数字,例 ...
- shell重温---基础篇(shell变量&字符串以及git GUI运行shell脚本方式)
既然是基础篇那肯定是需要对shell的各种需要注意的基本点进行说明了.接下来就是show time... shell呢,是一个用C语言编写的应用程序,是用户使用linux的桥梁.所以呢,他既是一 ...
- shell重温---基础篇(函数操作)
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.shell中函数的定义格式如下: [ function ] funname [()] { action; [ret ...
- shell重温---基础篇(连接数据库)
前几天分享了shell字符串操作,数组操作等,接下来回归到项目,进行数据库操作.按照一般情况来说,shell连接数据库基本上都是DB使用的,因为需要运行大量的sql啊什么的,所以都会封装到shell中 ...
- shell重温---基础篇(流程控制&if判断&for&while&循环操作)
和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { search( ...
- shell重温---基础篇(文件包含)
和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件.Shell 文件包含的语法格式如下: . filename # 注意点号(.)和文件名中间 ...
- shell重温---基础篇(printf命令&test命令)
在shell中还有一个输出的命令,那就是printf了.它模仿的是C程序库(library)里的printf()程序,是由POSIX标准所定义,所以嘞,使用printf脚本比echo移植性要好一点,它 ...
- shell重温---基础篇(输入/输出重定向)
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
随机推荐
- HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...
- servlet三种方式实现servlet接口
简单介绍 Servlet接口实现类 1.Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet.HttpServlet. 2.HttpServlet指能够处理HTTP请 ...
- 【洛谷P3807】(模板)卢卡斯定理
卢卡斯定理 把n写成p进制a[n]a[n-1][n-2]…a[0],把m写成p进制b[n]b[n-1][n-2]…b[0],则C(n,m)与C(a[n],b[n])*C(a[n-1],b[n-1])* ...
- 【luogu P1865 A % B Problem】 题解
题目链接:https://www.luogu.org/problemnew/show/P1865 其实就是埃拉托色尼筛素数模板... 好像每个数暴力枚举到sqrt()也可以...就算当我无聊练手罢 # ...
- Android学习笔记_72_Spinner的用法
一.普通 1. <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android= ...
- HTML5之表单新增类型介绍
1.html5的input标签的type类型新增介绍: 2.表单新增属性介绍: 3.代码示例: <!doctype html> <html> <head></ ...
- 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念
1 成绩管理系统概述 1.1 管理信息系统的概念 管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...
- Python 学习笔记(五)常用函数
Python内建函数 四舍五入: round() 绝对值: abs() >>> round(1.543,2) 保留两位小数,四舍五入为1.54 1.54 >>> r ...
- mysql 复制A表 到B表;insert into select * from table
情况一: INSERT INTO tb1 (a,b,c) select a1,b1,c1, from tb2 where .... -- 案例 百度云 INSERT INTO l_biz_car_o ...
- jzoj5195. 【NOIP2017提高组模拟7.3】A(递推,打表)
Description