一、Shell概述
1、Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
2、Shell的分类
Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。
C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh
Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。
3、Linux支持的Shell
/etc/shells :支持shell类型的记录文件
二、脚本执行方式
1、echo输出命令
echo [选项] [输出内容]
选项:
— -e:支持反斜线控制的字符转换
例如:
[root@localhost ~]# echo -e “hell\bo”
#删除左侧字符
[root@localhost ~]# echo -e “h\te\tl\nl\to”
#制表符与换行符
[root@localhost ~]# echo -e “\x68\t\x65\t\x6c\n\x6c\t\x6f\t”
#按照十六进制ASCII码也同样可以输出
[root@localhost ~]# echo -e “\e[1;31m 嫁人就要嫁凤姐 \e[0m”
#输出颜色
— #30m=黑色,31m=红色,32m=绿色,33m=黄色
— #34m=蓝色,35m=洋红,36m=青色,37m=白色
2、第一个脚本
[root@localhost ~]# vi hello.sh
#!/bin/bash
#The first program
echo -e “\e[1;34m 天上掉下个林妹妹!\e[0m”
3、脚本执行
赋予执行权限,直接运行
— chmod 755 hello.sh
— ./hello.sh
通过bash调用执行脚本
— bash hello.sh
三、Bash的基本功能
1、命令别名与快捷键
1)什么是别名
— 命令别名==人的小名
2)查看与设定别名
alias
#查看系统中所有的命令别名
alias 别名=’原命令’
#设定命令别名
3)别名永久生效与删除别名
vi ~/.bashrc
#写入环境变量配置文件
unalias 别名
#删除别名
4)命令生效顺序
— 第一顺位执行用绝对路径或相对路径执行的命令。
— 第二顺位执行别名
— 第三顺位执行Bash的内部命令
— 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
5)常用快捷键
— ctrl+c 强制终止当前命令
— ctrl+l 清屏
— ctrl+a 光标移动到命令行首
— ctrl+e 光标移到到命令行尾
— ctrl+u 从光标所在位置删除到行首
— ctrl+z 把命令放入后台
— ctrl+r 在历史命令中搜索
2、历史命令
1)历史命令
history [选项] [历史命令保存文件]
选项:
— -c:清空历史命令
— -w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
历史命令的调用
— 使用上、下箭头调用以前的历史命令
— 使用”!n”重复执行第n条历史命令
— 使用”!!”重复执行上一条命令
— 使用”!字串”重复执行最一条以该字串开关的命令
2)命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按”Tab”键就会自动进行补全
3、输出重定向
1)标准输入输出
2)输出重定向
3)输入重定向
[root@localhost ~]# wc [选项] [文件名]
选项:
— -c 统计字节数
— -w 统计单词数
— -l 统计行数
命令 < 文件:把文件作为命令的输入
命令 << 标识符 … 标识符:把标识符之间内容作为命令的输入
4、多命令顺序执行
1)多命令顺序执行
例子:
[root@localhost ~]# pwd;touch abc; ls; date
[root@localhost ~]# ls anaconda-ks.cfg && echo yes
[root@localhost ~]# ls anaconda-ks.cfg || echo no
[root@localhost ~]# 命令 && echo yes || echo nos
2)管道符
命令格式:
[root@localhost ~]# 命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
例子:
[root@localhost ~]# ll -a /etc/ | more
[root@localhost ~]# netstat -an | grep “ESTABLISHED”
5、Shell中特殊符号
1)通配符
2)Bash中其他特殊符号