当前位置:网站首页>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 编程的核心技术,敬请期待~
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
猜你喜欢

TorchDrug教程

node_exporter部署

英特尔集成光电研究最新进展推动共封装光学和光互连技术进步

Torchdrug tutorial

建立自己的网站(15)

基于unity的愤怒的小鸟设计

How to modify icons in VBS or VBE

Process of manually encrypt the mass-producing firmware and programming ESP devices

神经网络物联网应用技术学什么

Wireshark packet capturing TLS protocol bar displays version inconsistency
随机推荐
Deleting nodes in binary search tree
Lex and yacc based lexical analyzer + parser
Nature microbiology | viral genomes in six deep-sea sediments that can infect Archaea asgardii
信息学奥赛一本通 1336:【例3-1】找树根和孩子
Caché JSON 使用JSON适配器
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
6.26CF模拟赛E:价格最大化题解
Download the first Tencent technology open day course essence!
Using FTP
My colleagues quietly told me that flying Book notification can still play like this
Scala基础教程--14--隐式转换
Guys, for help, I use MySQL CDC 2.2.1 (Flink 1.14.5) to write Kafka and set
[uniapp] uniapp development app online Preview PDF file
[opencv introduction to mastery 9] opencv video capture, image and video conversion
876. Intermediate node of linked list
[发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
Li Kou brush question diary /day4/6.26
C language printing exercise
从实时应用角度谈通信总线仲裁机制和网络流控
prometheus安装