当前位置:网站首页>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 编程的核心技术,敬请期待~
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- 2022CoCa: Contrastive Captioners are Image-Text Fountion Models
- LeetCode FizzBuzz C#解答
- Using SSH
- Behind the ultra clear image quality of NBA Live Broadcast: an in-depth interpretation of Alibaba cloud video cloud "narrowband HD 2.0" technology
- 发送和接收IBM WebSphere MQ消息
- 2022健康展,北京健博会,中国健康展,大健康展11月13日
- Caché JSON 使用JSON适配器
- 从实时应用角度谈通信总线仲裁机制和网络流控
- Uni app and uviewui realize the imitation of Xiaomi mall app (with source code)
- 2022年字节跳动日常实习面经(抖音)
猜你喜欢
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
Bi skills - permission axis
Scala基础教程--17--集合
[发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
Wireshark packet capturing TLS protocol bar displays version inconsistency
一种将Tree-LSTM的强化学习用于连接顺序选择的方法
Li Kou brush question diary /day1/2022.6.23
Behind the ultra clear image quality of NBA Live Broadcast: an in-depth interpretation of Alibaba cloud video cloud "narrowband HD 2.0" technology
2022CoCa: Contrastive Captioners are Image-Text Fountion Models
Scala basic tutorial -- 13 -- advanced function
随机推荐
A method of using tree LSTM reinforcement learning for connection sequence selection
正则替换【JS,正则表达式】
2019年蜀山区第十五届青少年信息学竞赛
876. 链表的中间结点
2022养生展,健康展,北京大健康展,健康产业展11月举办
MXNet对GoogLeNet的实现(并行连结网络)
Scala basic tutorial -- 14 -- implicit conversion
Caché JSON 使用JSON适配器
使用canal配合rocketmq监听mysql的binlog日志
26. 删除有序数组中的重复项 C#解答
Li Kou brush question diary /day4/6.26
Wireshark packet capturing TLS protocol bar displays version inconsistency
Cache é JSON uses JSON adapters
《看完就懂系列》字符串截取方法substr() 、 slice() 和 substring()之间的区别和用法
[opencv introduction to mastery 9] opencv video capture, image and video conversion
物联网应用技术的就业前景和现状
Have you guys ever used CDC direct Mysql to Clickhouse
26. Delete the duplicate item C solution in the ordered array
Nature microbiology | viral genomes in six deep-sea sediments that can infect Archaea asgardii
从实时应用角度谈通信总线仲裁机制和网络流控