Shell脚本符号篇

前端之家收集整理的这篇文章主要介绍了Shell脚本符号篇前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一:shell运行原理:

前面#! 表示shebang
第一种:
shell脚本中#表示注释,这个和C语言的//类似,但是在#位于第一行开头,并且是个例外,它表示该脚本
使用后面指定是解释器/bin/bash解释执行
我们知道shell是命令行解释器,那么它又是如何运行程序的呢?
shell会fork一个子进程并调用exec执行./1.sh这个程序,exec系统调用应该吧子进程的代码段替换成./1.sh程序的代码段,并且从它的_start执行,然而1.sh只是个文本文件,根本没有代码段和_start函数,怎么办呢?其实exec还有另外一种机制,如果要执行的是一个文本文件,并且第一行用shebang指定了解释器,则用哪个解释器程序的代码段替换当前进程,并且从解释器的_start开始执行,而这个文本文件被当作命令行参数传给解释器,因此,执行上述脚本相当于执行程序.
第二种:
shell执行过程:

1:交互Shell(bash)fork/exec一个子Shell用于执行脚本,父进程bash等待子进程sh终止
2:sh读取脚本找那个的cd ..命令,调用相应的函数执行内建命令,改变当前工作目录为上一级目录
3:sh读取脚本中的ls命令,fork/exec这个程序,列出当前工作木库下的文件,sh等待ls终止
4:ls终止后,sh继续执行,读到脚本文件末尾,sh终止
5:sh终止后,bash继续执行,打印提示符等待用户输入.
二:shell变量:
1:环境变量:
换将变量可以从父进程传给子进程,因此shell进程的环境变量可以从当前shell进程传给fork出来的子进程,用printenv命令可以显示当前shell进程的环境变量
2:本地变量:
只存在与当前shell进程,用set命令可以显示当前shell进程找那个定义的所有变量和函数

注意:环境变量时任何进程都有的概念,而本地变量时shell特有的概念,在shell中,环境变量和本地变量的定义和用法相似
定义一个变量或者赋值


VALUE=value
注意等号两边不能由空格,否则会被解释称为命令或者命令参数

3:变量引用:
如果有一个变量叫做VALUE,用 VALUE@H_502_73@, VALUE表示它的值
echo SHELLecho SHELL123
对比:
echo SHELLecho @H_53_403@{SHELL} echo {SHELL}abc

注意:在定义变量的时不用 , ,和C语言不通的是,Shell变量不需要明确定义类型,事实上,Shell变量的值都是字符串.Shell变量不需要先定义后使用,如果对一个没有定义的变量值取值,则值为空串.

三:文件名代换::*?[]
这些用于匹配的字符称为通配符,具体如下
创建100个空文件

通配符*:匹配0个或者多个字符
?匹配任意一个字符

file *[1..9]匹配任意一个

四:命令带换:’或$()
由反引号括起来也是一条命令,Shell先执行该命令,然后将该命令输出结果立刻带换到当前命令行中

DATE=date echo DATE ()表示
DATE=$(date)

算术带换: (()), (())中的Shell变量取值将转换成整数
如:
VAR=3 echo (( VAL+3))

$(())中只能用+-*/以及()运算符,并且只能做整数运算.
五:转义字符
1:和C语言类似,\在shell中被用作转义字符,用于取出紧跟其后的单个字符的特殊意义,紧跟其后的字符取字面值.
如:创建一个文件名” ”(中间欧空格)的文件可以这样发送

2:还有一个字符虽然不具有特殊含义,但是要用它左文件名也很麻烦,就是-号,如果要创建-号开头的文件,按照前面的方法是不行的,为什么呢?因为各种UNIX命令都把-号开头的命令行参数当做命令的选项,而不是文件名.这时我们可以用下面的方法:

touch./test touch – -test
有一种用法,在\后敲回车表示续行,Shell并不会立刻执行,而是把光标移到下一行,给出一个续行提示符>,等待用户继续输入,最后把所有的续行命令当做一个命令执行

六:单引号和双引号
1:单引号
和C语言不一样,Shell脚本中的单引号和双引号一样都是字符串的界定符,但是单引号用于保持引号内所有字符的字面值,即使引号内的\回车也不例外,但是字符串中不能出现单引号.

如果单引号,没有匹配对,就输入回车,Shell会给出续行提示符,要求用户吧引号配对上.

2:双引号
双引号用于保持引号内所有字符的字面值( 回车也不例外),但以下情况例外
$ 的字面值

\’表示’的字面值
\”表示”的字面值
\表示\字面值,除以上情况外,在其他字符前面的\无特殊含义,只表示字面值

原文链接:https://www.f2er.com/bash/391676.html

猜你在找的Bash相关文章