当前位置:网站首页>Shell 编程核心技术《二》
Shell 编程核心技术《二》
2022-07-04 17:47:00 【Wu_Candy】
今天继续分享Shell 编程核心技术相关的知识,接着昨天的内容继续来讲。
“ Shell 编程核心技术《一》”这篇文章内容没看的同学,请自行去公众号补课哟~ 好啦,开始今天的文章分享。
1
特殊符号的使用
例如:输入 x=(echo abc) 指令将字符串 abc 存入 x 变量中,这时输入 echo x 指令,你会看到
还有一个需要注意的是序列,比如我们想从 1~10 获取一个序列,可以输入 echo {1..10} 指令来打印 1~10 的数字。
还可以使用 seq 1 10,它们是等价的。
2
变量类型
在 Shell 中是不区分变量类型的,这一点和 Python 很像,所有的变量都是基础类型,只在运行时做动态解析。其中字符串、数字、布尔是比较常用的。
首先是字符串,字符串常用于一些类似掐头、去尾、替换的操作,课后你可以自己去练习,这里不再具体演示。
然后是布尔类型,布尔的基本表现形式是 true 和 false,需要注意的是在 Shell 中有一个特殊的用法,如果是某个命令返回的是 0,则表示这个进程是正常工作的。
例如:输入 ls /tmp/hello.txt ;echo $? 指令,你可以看到返回值是 0,表示该进程运行正确,如果返回其他值就表示进程运行错误。
例如:输入 ls /tmp/hello.txtaaa ;echo $? 指令运行一个不存在的文件,输出为 1 表示运行错误。
3
判断
判断主要包括算数判断,与或非的逻辑判断,还有一些 Shell 中内置的判断三个方面。首先来看下算数判断,通常算数判断可以用来比较两个变量间的关系,比如两个数字的大小比较,字符串的匹配关系,等等。
除了简单的条件判断之外,Shell 还支持复杂的与、或、非逻辑判断。
除此之外,Shell 还提供了一些内置判断,比如:
- -e file 表示如果文件存在,则结果为真;
- -d file 表示如果文件是一个子目录,则结果为真;
- -f file 表示如果文件是一个普通文件,则结果为真;
- -r file 表示如果文件可读,则结果为真;
- -s file 表示如果文件的长度不为 0,则结果为真;
- -w file 表示如果文件可写,则结果为真;
- -x file 表示如果文件可执行,则结果为真。
因为数组不经常使用,这里就不再详细讲解,如果你感兴趣可以课后自己练习。
4
逻辑控制
学完变量的相关知识,我们继续学习逻辑控制,基于数据可以设计一些逻辑,如下所示:
- 条件判断 if;
- 分支判断 case、select,根据不同的条件进行不同的处理;
- 循环 for、while、until;
- break 和 continue,退出循环。
你可以看到整个逻辑控制和 Python 是很相似的。
5
if判断
首先看下 if 条件判断,if 首先检测判断条件是否成立,如果成立则执行 then 语句块内的逻辑,else 执行判断不成立的逻辑,还有 elif…if…,它类似于 Python,当条件都不满足时去判断下一个条件。
6
for 循环
然后是 for 循环,for 循环在 Shell 中有两种用法。 第一种用法类似 Java 或 Python ,从 1~10 进行循环,这个时候可以使用 for((i=0;i<10;i++)) 实现,这种用法是根据基数进行精准循环次数的一个判断。
第二种用法是 for 遍历循环,你可以使用 for…in…语句块。
例如:输入 for i in (seq 1 3 10) 指令,然后在 do 语句块中打印 echo i 的值,do 语句块以 done 结束。
你可以看到打印了 1、4、7、10,这个就是 for 循环的遍历用法。
7
while 循环
最后是 while 循环,和 for 循环很像,while 首先判断条件,条件成立则在 do 语句块中执行操作。
例如:定义 i=0,然后输入 while ((i<3));do((i=i+1));sleep 1;echo $i;done 指令。
你可以看到,输出结果每隔 1 秒打印一个 i 的值,而 i 的值逐渐增加,直到等于 3 时不再满足条件,退出循环。
而 while 还有一个很常用的功能,就是通过 while read line 循环读取文件的每一行。
例如:输入 while read line;do echo $line;done< /tmp/hello.txt 指令,它就会打印出文件的每一行信息。
除此之外,使用管道也是可以的,输入 cat /tmp/hello.txt | while read line;do echo $line;done 指令,输出效果是一样的。
8
退出控制
而有一些复杂的条件需要适时退出,这个时候就需要我们掌握控制退出的语句,比如:
- return 函数返回;
- exit 脚本进程退出;
- break 退出当前循环;
- continue 跳出当前循环,进入下一次循环。
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- 问下各位大佬有用过cdc直接mysql to clickhouse的么
- sqlserver的CDC第一次查询的能读取到数据,但后面增删改读取不到,是什么原因
- 2021 Hefei informatics competition primary school group
- C language printing exercise
- Caché JSON 使用JSON适配器
- 《看完就懂系列》字符串截取方法substr() 、 slice() 和 substring()之间的区别和用法
- Build your own website (15)
- 6.26CF模拟赛E:价格最大化题解
- 26. Delete the duplicate item C solution in the ordered array
- Using SSH
猜你喜欢
Mxnet implementation of googlenet (parallel connection network)
Wanghongru research group of Institute of genomics, Chinese Academy of Agricultural Sciences is cordially invited to join
2022 ByteDance daily practice experience (Tiktok)
Angry bird design based on unity
Scala基础教程--16--泛型
Li Kou brush question diary /day4/6.26
Nebula importer data import practice
Scala基础教程--13--函数进阶
千万不要只学 Oracle、MySQL!
2022CoCa: Contrastive Captioners are Image-Text Fountion Models
随机推荐
Summary and sorting of 8 pits of redis distributed lock
性能优化之关键渲染路径
基于lex和yacc的词法分析器+语法分析器
One question per day (2022-07-02) - Minimum refueling times
Scala基础教程--12--读写数据
整理混乱的头文件,我用include what you use
2014合肥市第三十一届青少年信息学奥林匹克竞赛(小学组)试题
6.26cf simulation match B: solution to array reduction problem
How is the entered query SQL statement executed?
Wanghongru research group of Institute of genomics, Chinese Academy of Agricultural Sciences is cordially invited to join
Go microservice (II) - detailed introduction to protobuf
模板_判断素数_开方 / 六素数法
Use canal and rocketmq to listen to MySQL binlog logs
自由小兵儿
C language printing exercise
PB的扩展DLL开发(超级篇)(七)
小发猫物联网平台搭建与应用模型
物联网应用技术的就业前景和现状
C # implementation defines a set of SQL statements that can be executed across databases in the middle of SQL (detailed explanation of the case)
Leetcode fizzbuzz C # answer