shell:
1.shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用shell来启动,挂起,停止甚至是编写一些程序.
2.shell还是一个功能强大的编程语言,易编写,易调试,灵活性强。Shell是解释执行的脚本语言,在shell中可以直接调用Linux系统命令.
结构:
1.#!执行指定脚本的shell
2.#注释行
3.命令和控制结构
变量类型:
临时变量:是shell程序内部定义的,其使用范围仅限于定义它的程序,对其他程序不可见。包括:用户自定义变量,位置变量。
永久变量:是环境变量,其值不随shell脚本的执行结束而消失
变量定义规则:
用户定义的变量由字母或下划线开头,由字母/数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。
在使用变量时,要在变量名前加上前缀$.
set
|
列出所有的变量
|
unset
|
删除一个变量
|
双引号
|
若双引号间内容有引用定义的变量则会解析输出该变量
|
单引号
|
单引号之间的内容原封不动地指定给了变量
|
read
|
从键盘读入数据赋值给变量
-p 提示信息:在等待输入时,输出提示信息
-t 秒数:指定read等待时间
-n 字符数:read命令只接受指定的字符数,就会执行
-s :隐藏输入的数据,适用于机密信息的输入
|
expr
|
对整数型变量进行算术运算
|
export
|
申明环境变量 变量名=变量值
|
env
|
查询系统中的环境变量
|
$?
|
最后一次执行的命令的返回状态。如果这个变量值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确.
|
$$
|
当前进程的进程号
|
$!
|
后台运行的最后一个进程的进程号
|
declare
|
declare [选项] 变量名 -:给变量设定类型属性 +:取消变量的类型属性 -i:将变量声明为整数型 -x:将变量声明为环境变量 -p:显示指定变量的被声明的类型
|
Bash常用快捷键:
Ctrl + a
|
把光标移动到命令行开头
|
Ctrl + e
|
把光标移动到命令行尾部
|
Ctrl + c
|
强制终止当前的命令
|
Ctrl + l
|
清屏,相当于clear命令
|
Ctrl + u
|
删除或剪切光标之前的内容
|
Ctrl + k
|
删除或剪切光标之后的内容
|
Ctrl + y
|
粘贴Ctrl + u 或Ctrl + k剪切的内容
|
Ctrl + r
|
在历史命令中搜索
|
Ctrl + d
|
退出当前终端
|
Ctrl + z
|
暂停并放入后台
|
Ctrl + s
|
暂停屏幕输出
|
Ctrl + q
|
恢复屏幕输出
|
输出重定向:
类型
|
符号
|
作用
|
标准输出重定向
|
命令 >文件
|
以覆盖的方式把命令的正确输出输出到指定的文件或设备当中
|
|
命令 >> 文件
|
以追加的方式,把命令的正确输出输出到指定的文件或设备当中
|
标准错误输出重定向
|
错误命令 2> 文件
|
以覆盖的方式把错误输出输出到指定的文件或设备当中
|
|
错误命令 2>> 文件
|
以追加的方式把错误输出输出到指定的文件或设备当中
|
|
|
|
正确输出和错误输出同时保存
|
命令 &>文件
|
以覆盖的方式把正确输出和错误输出都保存到同一个文件当中
|
|
命令 &>>文件
|
以追加的方式把正确输出和错误输出都保存到同一个文件当中
|
|
命令 >>文件1 2>>文件2
|
把正确的输出追加到文件1,把错误的输出追加到文件2
|
正则表达式:
元字符
|
作用
|
*
|
匹配*之前的0个或多个字符 例如: r*ed 会匹配 ed,rred,rrred,red等
|
?
|
匹配位于?之前的0个或一个字符 例如:r?ed 会匹配ed,red
|
+
|
匹配位于+之前的一个或多个字符 例如:r+ed会匹配rred,rrred
|
|
|
匹配位于|之前或者之后的字符 例如:red|blue 会匹配red,blue
|
.
|
匹配除了换行符外任意一个字符
|
^
|
匹配行首. 例如:^hello 会匹配以hello开头的行
|
$
|
匹配行尾. 例如:hello$会匹配以hello结尾的行
|
[]
|
匹配中括号中指定的任意一个字符,只匹配一个字符。例如:[abcdef]匹配任意一个字母,[0-9]匹配任意一个数字,[a-z][0-9]匹配小写和一位数字构成的两位字符
|
[^]
|
匹配除中括号的字符外的任意一个字符. 例如:[^0-9]匹配任意一个非数字字符,[^a-z]表示任意一伪非小写字母
|
\
|
匹配位于\之后的转义字符
|
\{n\}
|
表示其前面的字符恰好出现n次.例如:[0-9]\{4\}匹配4位数字,[1][3-8][0-9]\{9\}匹配手机号码
|
\{n,\}
|
表示其前面的字符出现不小于n次.例如:[0-9]\{2,\}表示两位以以上的数字
|
\{n,m\}
|
表示其前面的字符至少出现n次,最多出现m次.例如:[a-z]\{6,8\}匹配6到8位的小写字母
|
字符处理命令:
cut
|
用来显示行中的指定部分,删除文件中指定字段 -f 显示指定字段的内容 -d 指定字段的分隔符,默认的字段分隔为TAB
|
printf
|
格式化输出. printf 输出格式 输出内容 %ns:输出字符串,n是数字指定输出几个字符 %ni:输出整数,n是数字指定输出几个数字 %m,nf:输出浮点数,m和n是数字,指定输出的整数位数和小数位数。如%8.2f代表输出8位数,其中2位是小数,6位是整数.
|
sed
|
是一种轻量级流编辑器。sed主要是用来将数据进行选取,替换,删除,新增的命令 sed [选项] '[动作]' 文件名 -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕 -e:允许对输入数据应用多条sed命令编辑 -i:把sed修改的结果直接保存到文件,而不是由屏幕输出. 动作: a \:追加,在当前行后添加一行或多行。添加多行时,除最后一行外每行末尾需要用“\”代表数据未完结。 c \:行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。 i \:插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“\” 戴博阿数据未完结 d:删除指定的行 p:打印输出指定的行 s:字符替换,用一个字符串替换另外一个字符串。格式为:“行范围s/旧字符/新字符/g”和vim中的字符替换类似
|
sort
|
排序命令 sort [选项] 文件名 -f:忽略大小写 -n:以数值型进行排序,默认使用字符串排序 -r:反向排序 -t:指定分隔符,默认是分隔符是制表符 -k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
|
条件判断
判断文件类型
|
作用
|
-d 文件
|
判断该文件是否存在,并且是否为目录
|
-e 文件
|
判断文件是否存在
|
-f 文件
|
判断该文件是否存在,并且是否为普通文件
|
-L 文件
|
判断该文件是否存在,并且是否为符号连接文件
|
例如: test -e file 或者 [ -e file ]
判断文件权限
|
作用
|
-r 文件
|
判断该文件是否存在,并且该文件是否具有读权限
|
-w 文件
|
判断该文件是否存在,并且该文件是否具有写权限
|
-x 文件
|
判断该文件是否存在,并且该文件是否具有执行权限
|
例如:test -r file 或者 [ -r file ]
文件之间比较
|
作用
|
文件1 -nt 文件2
|
判断文件1的修改时间是否比文件2的新
|
文件1 -ot 文件2
|
判断文件1的修改时间是否比文件2的旧
|
文件1 -ef 文件2
|
判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法
|
例如: test file1 -nt file2 或者 [ file1 -nt file2 ]
整数之间比较
|
作用
|
num1 -eq num2
|
相等
|
num1 -ne num2
|
不相等
|
num1 -gt num2
|
大于
|
num1 -lt num2
|
小于
|
num1 -ge num2
|
大于等于
|
num1 -le num2
|
小于等于
|
例如: test 1 -eq 2 或者 [ 1 -eq 2 ]
字符串之间比较
|
作用
|
-z 字符串
|
判断字符串是否为空,为空返回真
|
-n 字符串
|
判断字符串是否为非空,非空返回真
|
str1 == str2
|
判断str1 是否和str2相等
|
str1 != str2
|
判断字符串是否不相等
|
例如: test a == 'a' 或者[ 'a' == 'a' ]
多重条件判断
|
作用
|
条件1 -a 条件2
|
相当于逻辑与
|
判断1 -o 条件2
|
相当于逻辑或
|
!判断
|
逻辑非
|
流程控制
单分支If条件语句
|
双分支if条件语句
|
多分支if条件语句
|
case条件语句
|
|
|
|
|
|
循环语句
|
|
|