一 、为什么要学习 shell
Shell 脚本语言是Linux/UNIX系统上一种重要的脚本语言,在Linux/UNIX领域应用极为普遍,熟练掌握Shell脚本语言是一个优秀的Linux/UNIX开发者和系统管理员的必经之路。利用Shell 脚本语言能够简洁地实现复杂的操做,并且Shell 脚本程序每每能够在不一样版本的Linux/UNIX系统上通用。
脚本语言的灵活性是以执行效率为代价的,脚本语言的执行效率一般不如编译型语言。固然,脚本语言通常不适用于大型的项目、计算复杂的工程或有高级需求的应用软件,它适用于系统管理、文本处理等方面完成特定功能的经常使用的小工具或小程序。
二 、什么是shell
shell就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,若是把计算机硬件比做一我的的躯体,而系统内核则是人的大脑,至于shell,把它比做人的五官彷佛更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,而后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各类操做。
在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它相似于DOS下的command和后来的cmd.exe。它接收用户命令,而后调用相应的应用程序。同时它又是一种程序设计语言。做为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;做为程序设计语言,它定义了各类变量和参数,并提供了许多在高级语言中才具备的控制结构,包括循环和分支。
三 、shell的分类
1 、图形界面shell
应用最为普遍的 Windows Explorer (微软的windows系列制做系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X window manger (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KDE、 XFCE。
2 、命令行式shell
传统意义上的shell指的是命令行式的shell,之后若是不特别注明,shell是指命令行式的shell。
文字操做系统与外部最主要的接口就叫作shell。shell是操做系统最外面的一层。shell管理你与操做系统之间的交互:等待你输入,向操做系统解释你的输入,而且处理各类各样的操做系统的输出结果。shell提供了你与操做系统之间通信的方式。
3 、交互式shell和非交互式shell
交互式模式就是shell等待你的输入,而且执行你提交的命令。这种模式被称做交互式是由于shell与用户进行交互。这种模式也是大多数用户很是熟悉的:登陆、执行一些命令、签退。当你签退后,shell也终止了。
shell也能够运行在另一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,而且执行它们。当它读到文件的结尾,shell也就终止了。
4 、shell的类型
Bourne shell (包括 sh,ksh,and bash)
Bourne shell ( sh) ,Korn shell ( ksh)
Bourne Again shell ( bash),POSIX shell ( sh)
C shell (包括 csh and tcsh),C shell ( csh)
TENEX/TOPS C shell ( tcsh)
以下咱们查看有哪些shell可用
四 、bash shell 的功能及特色
1 、命令记忆能力(history)
保存用户曾经执行过的命令操做,linux系统中存放位置:~/.bash_history 文件
a 、查看历史命令 history
b 、调用历史命令
c 、!n:执行历史记录中的第n条命令
d 、!str:执行历史记录中以“str”开头的命令
e 、设置记录历史命令的条数 /etc/profile
修改 HISTSIZE 参数(默认为1000条)
f 、history -c 为清空 ~/.bash_history中的记录
2 、指令和文件名补全
按tab键,它能够帮你补全一个指令,也能够帮你补全一个路径或者一个文件名。连续按两次tab键,系统则会把全部的指令或者文件名都列出来。
3 、命令别名的设置
alias把一个经常使用的而且很长的指令别名一个简洁易记的指令。若是不想用了,还能够用unalias解除别名功能。直接敲alias会看到目前系统预设的alias ,alias 别名 =“正常命令”
4 、做业控制,前台、后台控制
当运行一个进程时,你可使它暂停(按Ctrl+z),而后使用fg命令恢复它,利用bg命令使他到后台运行,你也可使它终止(按Ctrl+c)。
5 、通配符
*:任意长度的任意字符
?: 任意单个字符
[]:指定范围内的任意字符;[a-z]
[0-9]:全部数字,[a-z]:全部小写字母,[A-Z]:全部大写字母
[a-zA-Z]全部字母
[^]:脱字符,取反,指定范围外的任意单个字符,[^0-9]
[^0-9][^0-9]
6 、输入输出重定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为经常使用,它常常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加剧定向>>。
7 、管道符
管道符”|”,就是把前面的命令运行的结果丢给后面的命令
五 、bash 的变量
1 、bash变量类型;
本地变量:只对当前shell进程有效
局部变量:local VAR_NAME-Value
环境变量:export VAR_NAME=Value,对当前shell及其子shell有效
位置变量; $1,$2...
特殊变量; $$,$!,$#,$?
2 、变量的定义与显示及其引用
定义变量:
[set] VAR_NAME=Value (set可省略)
变量显示 :echo
引用变量 :
${VAR_NAME}
3 、变量的设置及其设置规则
变量与变量的内容以一个等号“=”来链接,等号两边不能直接使用空格符
变量内容如有空格符可使用双引号“”或是单引号‘’将变量内容结合起来,可是双引号内的特殊字符如$能够保持本来的特性,单引号的特殊字符则仅为通常字符(纯文本)。
4 、取消变量的方法
为使用“unset 变量名称”例如取消“NAME”的设置
“unset NAME”
5 、变量的命名风格
a:只能包含字母、数字和下划线
b:不能以数字开头
c:严格区分大小写
d:要作到见名知义
e:命名规范,风格统一
六 、系统环境变量与我的环境变量的配置文件
1 、bash的环境变量
使用env(environment)查看环境变量与常见环境变量的说明,固然使用export也会查看到一样的内容。
2 、环境变量的功能
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登陆名
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
LANG 语言相关的环境变量,多语言能够修改此环境变量
MAIL 当前用户的邮件存放目录
PWD 当前目录
3 、bash的配置文件
(1) 、profile类:交互式登陆用户
文件:/etc/profile:全局,对全部用户有效
/etc/profile.d/*.sh:全局,对全部用户有效
~/.bash_profile:仅对某用户本身有效
功能:设定环境变量;运行命令或脚本
(2)、 bashrc类:非交互式登陆用户
文件: /etc/bashrc:全局有效
~/.bashrc:仅对某用户本身有效
功能: 设定环境变量; 定义命令别名;
4 、在配置文件更新后,新的定义不会当即生效,要想生效,
有两种方式:
a,从新登陆;
b,source FILE
七、bash经常使用的基础命令的应用
1 、数据流的重定向
将默认数据流改成其余设备,就称为IO重定向
a 、输出重定向:
>,覆盖重定向;set -C关闭覆盖,避免覆盖
set +C 关闭上述功能,强制覆盖:>|
>>,追加剧定向
/dev/null;数据黑洞,bit bucket
b 、错误输出重定向:
2>;覆盖重定向
2>>: 追加剧定向
c 、同时重定标准输出和错误输出
COMMAND >/path/to/stdout 2> /path/to/error
标准输出和错误输出定向至一个文件
&> ,&>>
COMMAND &> /path/to/somewhere
COMMAND > /path/to/somewhere 2>&1
d 、输入重定向:
<:COMMAND < /from/somewhere
<<: Here Document ,此处建立文档
2 、管道
管道: shell COMMAND1 |
程序:读入数据,执行结果输出
cat 重定向:输入重定向,输出重定向
stdin :Standard Input (标准输入,默认输出)
stdout; Standard output (标准输出,默认输出)
3 、选取命令 grep ,cut
对于grep上期《Linux grep命令的使用及正则表达式》中详细介绍过, 咱们来看看cut命令的使用
语法:cut -d “分隔字符” [-cf] n 这里的n是数字
-d :后面跟分隔字符,分隔字符要用双引号括起来
-c :后面接的是第几个字符
-f :后面接的是第几个区块
4 、sort:用作排序
语法:sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2
-t 分隔符:做用跟cut的-d一个意思
-n :使用纯数字排序
-r :反向排序
-u :去重复
5 、wc:统计文档的行数、字符数、词数,
经常使用的选项为:
-l :统计行数
-m :统计字符数
-w :统计词数
6 、uniq:去重复的行
-c :统计重复的行数,并把行数写在前面
-d: 只显示重复的行
-u:只显示没重复的行
7、tr:替换字符,经常使用来处理文档中出现的特殊符号,经常使用的选项有两个:
-d :删除某个字符,-d 后面跟要删除的字符
-s :把重复的字符去掉
最经常使用的就是把小写变大写:tr ‘[a-z]’ ‘[A-Z]’