当前位置:网站首页>Shell 编程核心技术《一》
Shell 编程核心技术《一》
2022-07-04 17:47:00 【Wu_Candy】
今天主要讲解 Shell 编程核心技术,也就是如何编写Shell脚本。
在我们的日常工作中经常需要编写一些 Shell 逻辑脚本来批量处理一些任务,比如读取输入数据进行相关处理,将任务放入一个脚本进行自动化运行等场景,这些都涉及 Shell 编程,其实 Shell 编程也非常简单,就像 Java、Python 这些大众化的编程语言一样,也具备编程语言的特性,我们来看下 Shell 编程主要涉及的几个方面的内容。
- 变量
- 逻辑控制
- Shell 环境
- 脚本应用
- 自动化
变量
1
变量定义
学习一门编程技术,首先需要掌握如何使用变量,在 Shell 中定义一个变量非常简单,它与在 Python 中定义一个变量非常相似,你可以在任意位置定义一个变量并给它赋值,而 Shell 比 Python 更简洁的地方在于不强制输入单引号或双引号去指明内容。
如上图所示,定义一个 x=1 的变量,然后输入 echo x 指令,其中 x 表示可以引用这个变量。
如上图所示,输入 hello 字符串赋值给变量 x,然后再打印 echo $x。
如果输入 x=hello world ,这时系统运行会报错,因为 x=hello 会被认为是一个变量赋值,而 world 会被认为是另外一个独立的命令。
对于变量值中有空格时,我们只需要对字符串加上单引号或双引号。然后再打印这个变量 echo $x 就可以了。
在变量的定义中,有几点需要我们注意:
- 等号(=) 左右不要有空格;
- 如果内容有空格,需要使用单引号或双引号;
- 双引号支持转义符,$ 开头的变量会被自动替换。
在变量的使用中还有几个方法需要注意,echo a、echo “a” 都可以表示变量输出,但如果你想使用中更严谨建议使用双引号,还有就是多个字符串串联使用时,使用 {} 对内容括起来表示该内容是变量,避免与后面的其他字符混淆导致报错。
2
预定义变量
在 Shell 编程中,系统还提供了几个预定义变量。比如:
- PWD 表示当前目录;
- USER 表示当前用户;
- HOME 表示当前用户的主目录,HOME 还可以用 ~ 简写;
- PATH 表示当前所有可执行程序;
- RANDOM 可以产生一个随机数。
其中,我们需要特别注意 PATH 变量,比如输入 echo $PATH 指令,你可以看到 PATH 变量定义了所有可执行程序,定义在 PATH 中的程序可以直接调用程序名执行而不必再输入程序的全部路径。
比如使用 which ls 指令,你会发现 ls 在 /bin/ls 目录下,打印 echo $PATH 变量,你会发现里面有对应的 /bin 目录,但如果程序没有定义在 PATH 变量中,就需要你输入全部路径来执行程序 。
3
特殊符号的使用
除了这些之外,还需要掌握一些特殊的符号,例如:
- 双引号用于括起一段字符串,支持 $var 形式的变量替换;
- 单引号也表示其内容是字符串,但不支持转义;
- $’\n’ 表示 ANSI-C 引用;
- \ 反斜线,某些情况下表示转义;
- ((a=a+3)) 是整数扩展,双括号里面的变量作为整数处理;
- $(ls) 执行命令并把结果保存为变量,简写为``;
- {1..10} 等价于 seq 1 10,表示 1~10 数字;
- seq 1 3 10 表示生成一个步进为 3 的 1~10 的数字。
其中,需要重点介绍整数扩展,你可以把数学表达式放到双括号中进行相应的计算,
比如输入 echo $((100000/3)),它的计算结果是 33333,这里为什么没有小数位呢?
是因为 Shell 中目前仅处理整数,如果你需要精确到小数位可以使用 awk 指令。Shell的整数计算不使用 也是可以的,但如果你想引用具体的结果值,就需要使用 。
今天分享的内容实操性比较强,如果想掌握这些知识点,还是需要动手去一行行地敲命令,这样印象才会更深刻。下期将会继续分享Shell 编程的核心技术,敬请期待~
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- C语言打印练习
- Mxnet implementation of googlenet (parallel connection network)
- prometheus安装
- 技术分享 | 接口测试价值与体系
- 自由小兵儿
- Don't just learn Oracle and MySQL!
- Unity editor extends C to traverse all pictures in folders and subdirectories
- Scala基础教程--12--读写数据
- Go microservice (II) - detailed introduction to protobuf
- 整理混乱的头文件,我用include what you use
猜你喜欢
How is the entered query SQL statement executed?
My colleagues quietly told me that flying Book notification can still play like this
Scala基础教程--17--集合
【uniapp】uniapp开发app在线预览pdf文件
redis分布式锁的8大坑总结梳理
英特尔集成光电研究最新进展推动共封装光学和光互连技术进步
Rookie post station management system based on C language
Summary and sorting of 8 pits of redis distributed lock
神经网络物联网是什么意思通俗的解释
[uniapp] uniapp development app online Preview PDF file
随机推荐
2021 合肥市信息学竞赛小学组
From automation to digital twins, what can Tupo do?
Scala基础教程--18--集合(二)
1672. Total assets of the richest customers
PB的扩展DLL开发(超级篇)(七)
The CDC of sqlserver can read the data for the first time, but it can't read the data after adding, deleting and modifying. What's the reason
2022养生展,健康展,北京大健康展,健康产业展11月举办
Scala basic tutorial -- 20 -- akka
Mxnet implementation of googlenet (parallel connection network)
使用SSH
Scala基础教程--16--泛型
LeetCode FizzBuzz C#解答
Scala基础教程--19--Actor
LeetCode 赎金信 C#解答
2022-07-04: what is the output of the following go language code? A:true; B:false; C: Compilation error. package main import 'fmt' func
【uniapp】uniapp开发app在线预览pdf文件
One question per day (2022-07-02) - Minimum refueling times
876. 链表的中间结点
Guys, for help, I use MySQL CDC 2.2.1 (Flink 1.14.5) to write Kafka and set
技术分享 | 接口测试价值与体系