目录
那么要如何才能编写出这个特效的圣诞树呢?
下面一口君手把手教大家!
只想运行脚本的同学可以跳到最后面!
一、shell脚本知识
1. shell变量
变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。Shell 支持以下三种定义变量的方式:
variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的,稍后我们会详细说明。
注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
Shell 变量的命名规范和大部分编程语言都一样:
使用变量
使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:
变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界. 如果不给 skill 变量加花括号,写成echo "I am good at $skillScript",解释器就会把 $skillScript 当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
修改变量的值
单引号和双引号的区别
定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围,它们到底有什么区别呢?不妨以下面的代码为例来说明:
运行结果:
以单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。
建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。
trap命令是专用于捕捉信号的。比如像ctrl+c发送给终端的中断信号等等。在捕捉到信号之后,可以进行一系列的操作。
用法:
COMMAND表示trap命令接收到INT信号后要执行的动作什么。
可以捕捉的信号有:HUP INT等 不适用捕捉的信号:KILL TERM
信号回应方式
trap捕捉到信号之后,可以有三种反应方式:
loading="lazy">
1、执行一段程序来处理这一信号
2、接受信号的默认操作
3、忽视这一信号
它有三种形式分别对应三种不同的信号回应方式 第一种:
当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令.
第二种:
trap不指定任何命令,接受信号的默认操作.默认操作是结束进程的运行. 第三种:
trap命令指定一个空命令串,允许忽视信号.
使用trap -l命令可以查看信号有哪些:
清除终端屏幕
tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作。通过使用tput,您可以更改几项终端功能,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。
光标属性
文本属性
此外,还可以改变文本的颜色
举例
下面是一个带闪烁功能的时钟
效果
5. for循环
for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。
其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。
for的语法结构如下:
说明:
行1,讲串行中的字段迭代放入变量中 行2-4,接着将重复执行do和done之间的命令区域,直到串行中每一个字段均处理过为止。
举例 用for循环在家目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的目录
列出var目录下各子目录占用磁盘空间的大小。
6. while循环
while循环的语法:
说明:
流程图:
实例 计算1+2+3…………10
二、圣诞树脚本文件
三、执行脚本
还等什么呢?抓紧运行起来吧!
原文链接:














发表评论