当前位置:网站首页>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 跳出当前循环,进入下一次循环。
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- 千万不要只学 Oracle、MySQL!
- 物联网应用技术的就业前景和现状
- Scala基础教程--13--函数进阶
- Scala基础教程--16--泛型
- Safer, smarter and more refined, Chang'an Lumin Wanmei Hongguang Mini EV?
- Principle and application of ThreadLocal
- 从实时应用角度谈通信总线仲裁机制和网络流控
- A method of using tree LSTM reinforcement learning for connection sequence selection
- 神经网络物联网平台搭建(物联网平台搭建实战教程)
- Li Chi's work and life summary in June 2022
猜你喜欢
![[uniapp] uniapp development app online Preview PDF file](/img/11/d640338c626249057f7ad616b55c4f.png)
[uniapp] uniapp development app online Preview PDF file
Summary and sorting of 8 pits of redis distributed lock

DeFi生态NFT流动性挖矿系统开发搭建

Scala基础教程--15--递归

2022 ByteDance daily practice experience (Tiktok)

TorchDrug教程

node_exporter部署

神经网络物联网是什么意思通俗的解释

每日一题(2022-07-02)——最低加油次数

Behind the ultra clear image quality of NBA Live Broadcast: an in-depth interpretation of Alibaba cloud video cloud "narrowband HD 2.0" technology
随机推荐
How is the entered query SQL statement executed?
Scala基础教程--17--集合
英特尔集成光电研究最新进展推动共封装光学和光互连技术进步
【OpenCV入门到精通之九】OpenCV之视频截取、图片与视频互转
正则替换【JS,正则表达式】
PB的扩展DLL开发(超级篇)(七)
1672. 最富有客户的资产总量
一种将Tree-LSTM的强化学习用于连接顺序选择的方法
Scala基础教程--16--泛型
Summary and sorting of 8 pits of redis distributed lock
Is the securities account opened by qiniu safe?
Using SSH
876. 链表的中间结点
Bi skills - permission axis
Microservice architecture debate between radical technologists vs Project conservatives
.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
6.26CF模拟赛E:价格最大化题解
ByteDance dev better technology salon was successfully held, and we joined hands with Huatai to share our experience in improving the efficiency of web research and development
使用SSH
奥迪AUDI EDI INVOIC发票报文详解