16.Linux下的Shell编程

分类栏目:Linux

资讯

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条件语句
 
 
 
 
循环语句