shell的作用是解释执行用户的命令,用户输入一条命令shell就解释执行一条,这种方式成为交互式shell;shell还有一种执行命令的方式称为批处理,即用户事先编写好一个shell脚本(script),其中有很多条命令,让shell一次性执行这些命令。今天我们重点说的就是这种批处理shell。
>shell脚本文件名以.sh结尾,文件以第一行 #!/bin/bash 表示脚本后面指定的解释器是 /bin/bash
>shell文件执行方法:chmod u+x 文件名 修改文件可执行权限
./文件名 直接运行文件
>shell文件的执行原理:创建子shell,由子shell执行当前命令,但有部分命令除外,例如cd.. 这种命令称为shell的内建命令,这种命令不会fork子进程而是由自己执行命令。
$source ./script.sh
$ . ./script.sh
source 和 . 命令也是shell的内建命令,这种方式也不会创建子进程而是直接在交互式shell下逐行执行脚本中的命令。
>shell变量:环境变量和本地变量
环境变量:可以从父进程传递给子进程
本地变量:只存在于当前shell,使用set可以显示当前shell的所有变量和函数。
定义变量等号两边不能有空格:VARNAME=value
使用export可以导出环境变量
>变量引用:如果一个变量叫做VARNAME,使用${VARNAME}可以表示他的值,也可以不加花括号,加上花括号是可以用来进行字符串拼接:假设value=b; ${VARNAME}aaa 输出:baaa
>文件名代换:
通配符: * 匹配0个或者多个任意字符
?匹配一个任意字符
[若干字符] 匹配方括号中任意一个字符的一次出现
>命令代换:
` `或者$()
由反引号括起来的也是一条命令,shell先执行该命令,然后将输出结果立刻代换到当前命令行中
$ DATE='date'
$echo $DATE
也可以 $DATE=$(date)
算数运算$(( )) $echo $(($date+3)) 只能计算整数
区别:` ` 反引号本身对 \ 有转义的作用,所以如果要使用 \的话就需要 \\
$() 没有对 \进行转义 \ 还是 \
>转义字符 \
作用:用于去除紧跟其后的单个字符的特殊意义(回车除外),即紧跟其后的字符取字面值
eg:
$ touch \$\ \$ 创建一个名字为$ $的文件
>单引号 ‘ ’:字符串
作用:保持引号内所有字符的字面值
>双引号 “ ”:字符串
作用:保持引号内所有字符的字面值,但有些字符例外
比如:
$加变量名可以取变量的值
`` 仍表示命令替换
\$表示$的字面值
\`表示`的字面值(单引号)
\"表示"的字面值
\\表示\的字面值