当前位置:网站首页>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 编程的核心技术,敬请期待~
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- Safer, smarter and more refined, Chang'an Lumin Wanmei Hongguang Mini EV?
- 【机器学习的数学基础】(一)线性代数(Linear Algebra)(上+)
- 神经网络物联网是什么意思通俗的解释
- Deleting nodes in binary search tree
- Scala basic tutorial -- 19 -- actor
- 6.26cf simulation match B: solution to array reduction problem
- Summary and sorting of 8 pits of redis distributed lock
- Unity编辑器扩展C#遍历文件夹以及子目录下的所有图片
- TorchDrug教程
- Other InterSystems%net tools
猜你喜欢
随机推荐
神经网络物联网平台搭建(物联网平台搭建实战教程)
A method of using tree LSTM reinforcement learning for connection sequence selection
Unity编辑器扩展C#遍历文件夹以及子目录下的所有图片
1672. 最富有客户的资产总量
自由小兵儿
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
Installation and use of VMware Tools and open VM tools: solve the problems of incomplete screen and unable to transfer files of virtual machines
Caché WebSocket
发送和接收IBM WebSphere MQ消息
Nebula importer data import practice
2019年蜀山区第十五届青少年信息学竞赛
Leetcode fizzbuzz C # answer
数组中的第K个最大元素
请教一下 flinksql中 除了数据统计结果是状态被保存 数据本身也是状态吗
MXNet对GoogLeNet的实现(并行连结网络)
建立自己的网站(15)
SSL证书续费相关问题详解
每日一题(2022-07-02)——最低加油次数
整理混乱的头文件,我用include what you use
Have you guys ever used CDC direct Mysql to Clickhouse