1、Shell是什么
- shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。
- shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。shelll是解释执行的脚本语言,在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
查看shell版本:
查看兼容的shell版本
3、Shell脚本执行
- echo输出命令
-> echo [选项] [输出内容]
选项:-e: 支持反斜线控制的字符转换
- 第一个脚本
- 脚本执行
-> 赋予执行权限,直接运行
- chmod 755 hello.sh
- ./hello.sh
-> 通过Bash调用执行脚本
- bash hello.sh
4、Bash的基本功能
- 命令别名与快捷键
-> 查看与设定别名
- alias
#查看系统中所有的命令别名
- alias 别名='原命令'
#设定命令别名
-> 别名永久生效与删除别名
- vi ~/,bashrc
#写入环境变量配置文件
source .bashrc可以让环境变量直接生效,否则需要重启
- unalias 别名
#删除别名
- 历史命令
-> history [选项] [历史命令保存文件]
选项:-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
注:历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
-> 历史命令的调用
- 使用上、下箭头调用以前的历史命令
- 使用 "!n" 重复执行第n条历史命令
- 使用 "!!" 重复执行上一条历史命令
- 使用 "!字串" 重复执行最后一条以该字串开头的命令
- 输出重定向
1、标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
键盘 | /de/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
2、输出重定向
类型 | 符号 | 作用 |
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出 输出到指定的文件或设备当中 |
命令 >> 文件 | 以追加的方式,把命令的正确输出 输出到指定的文件或设备当中 |
|
标准错误输出重定向 | 错误命令 2> 文件 | 以覆盖的方式,把命令的错误输出 输出到指定的文件或设备当中 |
错误命令 2>> 文件 | 以追加的方式,把命令的错误输出 输出到指定的文件或设备当中 |
|
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出 都保存到同一个文件当中 |
命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出 都保存到同一个文件当中 |
|
命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出 都保存到同一个文件当中 |
|
命令 &>> 文件 | 以追加的方式,把正确输出和错误输出 都保存到同一个文件当中 |
|
命令>>文件1 2>> 文件2 | 把正确的输出追加到文件1中, 把错误的输出追加到文件2中。 |
3、输入重定向
- [root@localhost ~ ]# wc [选项] [文件名]
选项: -c 统计字节数
-w 统计单词数
-l 统计行数
(丢到黑洞垃圾站,不显示,也不输出)
- 管道符
1、多命令顺序执行
多命令执行符 | 格式 | 作用 |
; | 命令1 ; 命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1 && 命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1 || 命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
如图:
2、管道符
- 命令格式
- [root@localhost ~ ]#命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
- 通配符
通配符 | 作用 |
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任意内容 |
[] | 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符。 |
- Bash中其他特殊符号
符号 | 作用 |
' ' | 单引号。在单引号中所有的特殊符号,如"$"和“‘’”反引号都没有特殊含义。 |
" " | 双引号。在双引号中特殊符号都没有特殊含义,但是"$"、"`"和"\"是例外,拥有"调用变量的值"、"引用命令"和"转义符"的特殊含义 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在Shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出"$"符号,而不当做是变量引用。 |