目录结构
一、Shell概述
1. Shell简介 & 工作原理
2. Shell分类
二、脚本执行方式
1. 输出命令:echo
2. 第一个Shell脚本(.sh)
3. 脚本执行
三、Bash的基本功能
1. 别名与快捷键
1)别名查看&设置
2)命令生效执行优先顺序
3)常用快捷键
2. 历史命令:history
1)查看历史命令存储的文件
2)历史命令的调用
3)命令补全
3. 输出重定向
1)标准输入&输出
2)输出重定向
3)输入重定向
4. 管道符
1)多命令顺序执行
2)管道符
5. 通配符
1)常用通配符
2)Bash中的其他特殊符号
一、Shell概述
1. Shell简介 & 工作原理
引入Shell:
在系统终端输入的字符即ASCII字符,计算机不能识别,需要翻译成为二进制(0和1组成),计算机才能有效识别,此时即需要Shell构建桥梁联通用户和计算机进行交流
Shell概念:
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序(如:命令终端界面),用户可以用Shell来启动、挂起、停止甚至是编写一些程序。Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令
Shell工作场景:
用户与内核通过Shell的搭桥牵线进行交流
Step1:用户在命令终端界面输入常规命令的字符,Enter回车
Step2:Shell根据ASCII码表,将用户输入的字符翻译成二进制形式的字符串
Step3:Shell将翻译的结果传递给内核
Step4:内核调用计算机硬件来处理用户输入的命令
Step5:硬件执行的结果,通过内核传递给Shell
Step6:通过Shell再将处理结果翻译成用户可识别的ASCII字符
Step7:传递计算机处理结果呈现给用户
2. Shell分类
Shell主要有两种语法类型:Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括:sh、ksh、Bash、psh、zsh,其中Bash是目前Linux中标准的Shell;C家族主要包括:csh、tcsh,主要是给Unix使用
1)Bourne Shell:
从1979起Unix就开始使用Bourne Shell,其主文件名为sh
2)C Shell:
C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
查看Shell的相关操作:
查看系统中所有支持的shell:cat /etc/shells
查看当前系统运行的shell:echo $SHELL
切换状态(Bash --> sh):sh
退出切换(sh --> Bash):exit
二、脚本执行方式
1. 输出命令:echo
echo [选项] [输出内容]
选项:
-e 支持反斜线控制的字符转换
控制字符 | 作用 |
---|---|
\a | 输出警告音 |
\b | 退格键(向左删除键) |
\n | 换行符 |
\r | 回车键 |
\t | 制表符(Tab键) |
\v | 垂直制表符 |
\0nnn | 按照8进制ASCII码输出字符(0为数字零,nnn为3位8进制数) |
\xhh | 按照16进制ASCII码表输出字符(hh为2位16进制数) |
<关联>:ASCII码对照表
如:echo -e "\x68\x65\x6C\x6C\x6F\t2019\nFighting"
输出颜色:
# 输出颜色
echo -e "\e[1;31m hello 2019 \e[0m"
颜色:
30m--31m--32m--33m--34m--35m--36m--37m
黑----红---绿---黄---蓝---洋红--青---白
2. 第一个Shell脚本(.sh)
以命令vi hello.sh
新建Shell脚本文件,文件开头填写 #!/bin/bash 为必填内容,目的是为了规范使用,且保证在Shell中调用其他语言时正常运行
#!/bin/bash
# 第1个Shell脚本
echo -e "\e[1;34m Hello World ! \e[0m"
3. 脚本执行
方式①:赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
方式②:通过Bash调用执行脚本(无须赋权)
bash hello.sh
三、Bash的基本功能
1. 别名与快捷键
1)别名查看&设置
# 查看系统中已经生效的命令别名
alias
# 设置命令的别名(临时设置)
alias 别名='原命令'
# 删除别名(临时删除)
unalias 别名
PS:别名设置时,等号=
左右不留空格,否则可能设置不成功
vim作为vi的增强版,可将vim的别名设置为vi,如:alias vi='vim'
取消设置:unalias vi
使别名配置永久生效:
# 写入环境变量配置文件(永久生效)
vi ~/.bashrc
# 使配置文件立即生效
source .bashrc
2)命令生效执行优先顺序
No.1:绝对or相对路径执行的命令
No.2:别名设置的命令
No.3:Bash内部命令
No.4:$PATH环境变量定义的目录下查找到的命令
3)常用快捷键
【CTRL+C】 ==> 强制终止当前命令的执行
【CTRL+L】 ==> 清屏
【CTRL+A】 ==> 光标移动到命令行首
【CTRL+E】 ==> 光标移动到命令行尾
【CTRL+U】 ==> 从光标所在位置删除直至行首
【CTRL+Z】 ==> 把命令放入后台(未终止命令,还会占用一定的系统资源)
【CTRL+R】 ==> 在历史命令中搜索
2. 历史命令:history
history [选项] [历史命令保存文件]
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
1)查看历史命令存储的文件
vi /etc/profile
2)历史命令的调用
①使用上下箭头 ↑↓
调用以前的历史命令
②使用 "!字串
" 重复执行最后一条以该字串开头的命令
如:service network restart
,执行一次之后,下一次可用 !ser
执行,提升操作效率
3)命令补全
Bash中命令与文件补全,可用Tab键,连续2次按Tab键则会展示该字符串开头的所有命令备选;相似的,连续按2次Tab键则会展示某个目录下的所有子目录
3. 输出重定向
1)标准输入&输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
2)输出重定向
从把本来会输出到显示器上的信息,改变方向写入到指定文件中保存而不在显示器输出
应用场景:Linux服务器上人为维护以外的时间,设置定时执行某个命令,然后将其结果保存到指定文件中成为日志,以备查看
a-标准正确输出重定向
符号 | 作用 |
---|---|
命令 > 文件 |
把命令的正确输出保存到指定文件or设备中 (覆盖原内容) |
命令 >> 文件 |
(追加到原内容之后) |
b-标准错误输出重定向
符号 | 作用 |
---|---|
错误命令 2>文件 |
把命令的错误输出保存到指定文件or设备中 (覆盖) |
错误命令 2>>文件 |
(追加) |
PS:对于错误输出,建议符号>
左右两侧不留空格
c-同时保存正确输出和错误输出的结果
符号 | 作用 |
---|---|
命令 > 文件 2>&1 命令 &>文件
|
把正确输出和错误输出都保存到同一个文件中 (覆盖) |
命令 >> 文件 2>&1 命令 &>>文件
|
把正确输出和错误输出都保存到同一个文件中 (追加) |
命令>>文件1 2>>文件2 |
把正确输出追加到文件1中,把错误输出追加到文件2中 |
3)输入重定向
wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
命令 < 文件
:把文件作为命令的输入,统计文件中的字符
命令 << 标识符
:把出现标识符及以前的内容作为输入,统计其中的字符
4. 管道符
1)多命令顺序执行
执行符 | 格式 | 作用 |
---|---|---|
; | 命令1; 命令2 |
多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1 && 命令2 |
逻辑与 当命令1执行正确,则才会执行命令2 |
命令1 || 命令2 |
逻辑或 当命令1执行错误,则才会执行命令2 |
应用场景
【1】执行某个or几个命令所需的时间计算:
date; xxx命令; date
如:
date; dbupdate; date
【2】判断某个命令执行是否正确:
xxx命令 && echo yes || echo no
如:
pwd && echo yes || echo no
password && echo yes || echo no
2)管道符
# 命令1的正确输出,作为命令2的操作对象
命令1 | 命令2
如:
对上一个命令的查询结果,通过下一个命令进行分屏查看:ll -a /etc/ | more
查询服务器上连接的用户:netstat -an | grep ESTABLISHED
统计服务器上连接的用户数:netstat -an | grep ESTABLISHED | wc -l
5. 通配符
1)常用通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个or任意多个任意字符(匹配任何内容) |
[] | 匹配中括号中的任意一个字符 |
[-] | 匹配中括号中的任意一个字符,符号- 连接字符的范围 |
[^] | 逻辑非,匹配非中括号内的一个字符。如:[^0-9] |
2)Bash中的其他特殊符号
符号 | 作用 |
---|---|
' | 单引号。在其内所有的特殊符号都无特殊含义,以普通字符处理 |
"" | 双引号。在其内$可调用变量的值,`可引用命令,\可作转义符 |
`` | 反引号。其内引用的是系统命令,在Bash中会先执行它 |
$() | 和反引号作用一致,用来引用系统命令 |
# | 在Shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值 |
\ | 转义符。跟在\之后的特殊符号将会失去特殊含义,变为普通字符 |
网友评论