当前位置:网站首页>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 跳出当前循环,进入下一次循环。
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- 技术分享 | 接口测试价值与体系
- Bi skills - permission axis
- 【机器学习的数学基础】(一)线性代数(Linear Algebra)(上+)
- 26. 删除有序数组中的重复项 C#解答
- Angry bird design based on unity
- Detailed explanation of issues related to SSL certificate renewal
- SSL证书续费相关问题详解
- Principle and application of ThreadLocal
- Build your own website (15)
- 更安全、更智能、更精致,长安Lumin完虐宏光MINI EV?
猜你喜欢
[发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
ThreadLocal原理与使用
建立自己的网站(15)
神经网络物联网应用技术就业前景【欢迎补充】
Rookie post station management system based on C language
What if the self incrementing ID of online MySQL is exhausted?
Go microservice (II) - detailed introduction to protobuf
Build your own website (15)
每日一题(2022-07-02)——最低加油次数
MXNet对GoogLeNet的实现(并行连结网络)
随机推荐
Li Kou brush question diary /day1/2022.6.23
2021 Hefei informatics competition primary school group
Go微服务(二)——Protobuf详细入门
[发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
LeetCode 赎金信 C#解答
Esp32-c3 introductory tutorial questions ⑫ - undefined reference to ROM_ temp_ to_ power, in function phy_ get_ romfunc_ addr
The 15th youth informatics competition in Shushan District in 2019
[opencv introduction to mastery 9] opencv video capture, image and video conversion
国元期货是正规平台吗?在国元期货开户安全吗?
2019年蜀山区第十五届青少年信息学竞赛
完善的js事件委托
神经网络物联网应用技术就业前景【欢迎补充】
发送和接收IBM WebSphere MQ消息
[uniapp] uniapp development app online Preview PDF file
读写关闭的channel是啥后果?
学习路之PHP--phpstudy创建项目时“hosts文件不存在或被阻止打开”
In flinksql, in addition to data statistics, is the saved data itself a state
My colleagues quietly told me that flying Book notification can still play like this
删除字符串中出现次数最少的字符【JS,Map排序,正则】
876. Intermediate node of linked list