Shell基础(一)Bash基本功能
Shell概述
-
什么是Shell
Shell也可以叫Shell命令解释器,它通过用户发出的命令来调用相应的程序。 -
Linux支持的shell
Linux默认使用Bash Shell,查看/etc/shells文件可以查看Linux支持的shell类型,并且可以互相切换。
Shell脚本的运行方式
echo命令
[root@localhost ~]# echo 选项 输出内容
选项:
- -e:支持反斜线控制的字符转换
- -n:取消输出后行末的换行符号(内容输出后不换行)
转义字符表:
转义字符 | 含义 |
---|---|
\ | \ |
\a | 警告音 |
\b | 向左删除 |
\c | 取消输出行末的换行符,和"-n"选项一致 |
\e | escape键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\0nnn | 按照八进制输出ASCII表字符,nnn表示三位八进制数 |
\xhh | 按照十六进制输出ASCII表字符,hh表示两位十六进制数 |
echo也可以输出有颜色的字符。
Shell脚本的执行
- 赋予权限
[root@localhost ~]# chmod u+x hello.sh
- 通过路径执行脚本
[root@localhost ~]# ./hello.sh #通过相对路径执行
hello world!
[root@localhost ~]# /root/hello.sh #通过绝对路径执行
hello world!
- 通过bash调用执行脚本
[root@localhost ~]# bash hello.sh
hello world!
Bash的基本功能
历史命令
root@wszd158-PC:~# history 选项 历史命令保存文件
选项:
- -c:清空历史命令
- -w:将缓存中的历史命令写入历史命令保存文件,如果不手工指定历史命令保存文件,则放入默认历史命令保存文件~/.bash_history中
例:
root@wszd158-PC:~# history -w
历史命令条数的查看并不是无限的,有着最大的限制,这个限制可以在环境变量配置文件/etc/profile中修改。
root@wszd158-PC:~# vim /etc/profile
......
HISTSIZE=1000
......
历史命令的调用
- 使用上下箭头调用以前的历史命令
- 使用"!n"执行第n条历史命令
- 使用"!!"重复执行上一条命令
- 使用"!字符串"重复执行最后一条以该字符串开头的历史命令
- 使用"!$"重复上一个命令的最后一个参数
命令别名
使用alias命令可以设置与查看命令的别名,不过这样的设置是暂时的,长久的设置需要修改~/.bashrc文件。
[root@localhost ~]# vim .bashrc
......
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'
......
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
......
命令的优先级:
- 第一顺位执行用绝对路径或相对路径执行的命令
- 第二顺位执行别名
- 第三顺位执行Bash的内部命令
- 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
Bash常用快捷键
快捷键 | 作用 |
---|---|
Tab键 | 命令或文件补全,有一个相同的按一下Tab键就可以补全,有多个相同的按两下Tab就会有提示。 |
ctrl+A | 把光标移动到命令行开头,如果我们输入的命令过长,想要把光标移动到命令行开头时使用。 |
ctrl+E | 把光标移动到命令行结尾。 |
ctrl+C | 强制终止当前的命令。 |
ctrl+L | 清屏,相当于clear命令。 |
ctrl+U | 删除或剪切光标之前的命令,输错命令时比较方便。 |
ctrl+K | 删除或剪切光标之后的的内容。 |
ctrl+Y | 粘贴ctrl+U剪切的内容。 |
ctrl+R | 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。 |
ctrl+D | 退出终端或者发送邮件。 |
ctrl+Z | 将目前运行的程序放入后台。 |
ctrl+S | 暂停屏幕输出。 |
ctrl+Q | 恢复屏幕输出。 |
输入输出重定向
- Bash的标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
- 输出重定向
输出不再输出到屏幕上,而是输出到文件中。
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令>文件 | 以覆盖的方式将命令的正确执行结果输出到文件或设备中。 |
标准输出重定向 | 命令>>文件 | 以追加的方式,将命令的正确执行结果输出到文件或设备中。 |
标准错误输出重定向 | 错误命令2>文件 | 以覆盖的方式,把命令的错误执行结果输出到指定的文件或设备中。 |
标准错误输出重定向 | 错误命令2>>文件 | 以追加的方式,把命令的错误执行结果输出到指定的文件或设备中。 |
正确和错误的保存命令分开,这些对于人来说是不合理的,所以我们需要可以将正确信息和错误信息都能保存下来的命令。
正确输出和错误输出同时保存:
命令 | 作用 |
---|---|
命令>文件2>&1 | 以覆盖的方式,把正确输出和错误输出都保存在同一个文档中。 |
命令>>文件2>&1 | 以追加的方式,把正确输出和错误输出都保存在同一个文档中。 |
命令&>文件 | 以覆盖的方式,把正确输出和错误输出都保存在同一个文档中。 |
命令&>>文件 | 以追加的方式,把正确输出和错误输出都保存在同一个文档中。 |
命令>>文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 |
- 输入重定向
例:wc命令可以统计文件中的行数,单词数和字符数。
[root@localhost ~]# wc anaconda-ks.cfg
46 108 1134 anaconda-ks.cfg
选项:
- -c:统计字符数。
- -w:统计单词数。
- -l:统计行数。
多命令顺序执行
- 命令1;命令2:多个命令顺序执行,命令之间没有任何逻辑联系。
- 命令1&&命令2:当命令1正确执行,则命令2才会执行;当命令1执行不正确,命令2不执行。
- 命令1||命令2:当命令1执行不正确,命令2才执行;命令1正确执行,命令2不执行。
管道符 “|”
Shell特殊符号
符号 | 作用 |
---|---|
’ ’ | 单引号,在单引号中的所有特殊符号都没有特殊含义"$""`"都没有特殊含义。 |
" " | 双引号,在双引号中特殊符号都没有特殊含义,但是"$""`""“是例外,有"调用变量的值”“引用命令”"转义符"的特殊含义 |
| 反引号,反引号括起来的内容是系统命令,在Bash中会优先执行,和 $ () 的作用一样,不过建议使用$()。 |
$() | 和反引号一样,用来引用系统命令,需要把命令的值赋予变量时可以用到。 |
() | 用于遗传命令执行是,()中的命令会在子Shell中运行。 |
{} | 用于一串命令执行时,{}中的命令会在当前Shell中执行,也可以用于变量变形与替换。 |
[] | 用于变量的测试。 |
# | 在Shell脚本中,#开头的行代表注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符, |
例:
[root@localhost ~]# t=$(date) #将date命令的执行结果赋予变量t
[root@localhost ~]# echo $t
2022年 02月 06日 星期日 01:12:47 EST
ps:尚硅谷linux视频课程学习笔记