Linux 笔记分享四:Shell 基础
一、Shell概述
1、Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令
Shell将英文字符转换成二进制,依据ASCII字码表
2、Shell的分类
- Bourne Shell
Bourne Shell: 从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh
此Shell版本比较老,不支持历史命令
Linux现使用的是此版本的升级版
- C Shell
C Shell主要在BSD版的Unix系统中使用,其语法和C语言类似而得名
- 分类总结
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容
Bourne家族主要包括sh、ksh、Bash(linux现用)、psh、zsh
C家族主要包括csh、tcsh
- 查看Linux当前运行的Shell
echo $SHELL
返回:
/bin/bash
- 关于Bash
Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell
- 查看Bash兼容的shell
vi /etc/shells
- 进入sh版本的Shell
sh
一般安全模式下进入的是此版本的Shell
- 进入csh版本的Shell
csh
- 退出到上一个版本的Shell
exit
- 关于进入Shell的说法
初始登录系统进入的Shell叫父Shell,当进入某一Shell叫进入子Shell
二、脚本执行方式
1、echo
输出字符串命令
echo [选项] [字符串]
-e: 支持反斜杠控制的字符转义
- 转义列表
字符 | 含义 |
---|---|
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\0八进制代码 | 按照ASCII的八进制输出对应字符 |
\x十六进制代码 | 按照ASCII的十六进制输出对应字符 |
例如:
echo -e "hell\bo"
echo -e "h\te\tl\nl\to\t"
echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f"
- 颜色支持
echo -e "\e[1;31m字符串\e[0m"
30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色
- 我的第一个Shell脚本
#!/bin/bash
#我的第一个Shell脚本
echo -e "\e[1;34mHello World\e[0m"
将其保存为hello.sh
- 运行脚本
赋予权限,直接执行(常用)
chmod 755 hello.sh
通过Bash调用执行脚本
bash hello.sh
三、Bash的基本功能
1、命令别名
- 查看系统中所有的命令别名
alias
- 设定别名
alias 别名='原命令'
其实,以上设置别名的格式与alias查看的别名格式一样
cp、mv、rm默认执行是带-i的,目的是起到询问作用,防止误操作
注意,这样设定的别名是临时生效,重启后失效,关于永久生效请继续阅读
- 关于vi
vim是vi的增强版本,vim支持颜色
- 关于别名永久生效
vim ~/.bashrc
然后:
source ~/.bashrc
打开家目录中的别名环境变量配置文件
将别名配置写入保存
- 删除别名
unalias 别名
临时删除,如果配置文件还有配置,则重启重新生效
- 关于命令的优先级
以下从优先级最高到最低排序
1、通过绝对路径或相对路径执行的命令
2、执行别名
3、执行Bash的内部命令
4、通过$PATH环境变量定义的目录查找顺序找到的第一个命令
- 关于
ls
显示的颜色问题
目录一般是蓝色
可执行文件一般是绿色
普通文件没有颜色
2、常用快捷键
ctrl+c
: 强制终止当前命令
ctrl+l
: 清屏
ctrl+a
: 光标移动到命令行首
ctrl+e
: 光标移动到命令行尾
ctrl+u
: 从光标所在位置删除到行首
ctrl+z
: 把命令放入后台
ctrl+r
: 在历史命令中搜索
- 清屏命令
clear
等同于快捷键
3、历史命令
- 查看历史命令
history [选项] [历史命令保存文件]
没有选项,是查看当前缓存的历史命令
-c: 清空历史命令(不建议这样干)
-w: 把历史命令缓存保存到文件中,后面需要历史命令保存文件路径
每次退出,历史命令缓存将自动保存为文件
每次登陆,会读取保存的历史命令文件放入缓存中
历史命令默认为1000条,关于修改,请继续阅读
- 修改默认历史命令数量
vim /etc/profile
然后修改:
HISTSIZE=1000
即可
- 历史命令的调用方式
使用上下箭头调用
使用
!n
调用编号为n的历史命令使用
!!
调用最后执行的一条命令使用
!字符串
调用最后执行以字符串开头的命令
4、Tab键
提供命令补全和目录补全
命令补全依靠PATH变量,目录补全依靠你的目录
要养成按Tab键的习惯,它可以提高输入速度,并能检测你的命令是否有错误
5、输入和输出重定向
- 标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
- 输出重定向
- 正确和错误信息同时保存
命令 | 作用 |
---|---|
命令 > 文件 2>&1 | 已覆盖的方式,把正确输出和错误输出都保存到同一个文件中 |
命令 >> 文件 2>&1 | 已追加的方式,把正确输出和错误输出都保存到同一个文件中 |
命令 &> 文件 | 已覆盖的方式,把正确输出和错误输出都保存到同一个文件中 |
命令 &>> 文件 | 已追加的方式,把正确输出和错误输出都保存到同一个文件中 |
命令 >> 文件 2>> 另一个文件 | 把正确输出和错误输出保存到不同的文件中 |
- /dev/null
这个文件是系统的黑洞,输出信息写入这里面就没啦
- 输入重定向(了解一下就可以了)
命令 < 文件把文件作为命令的输入
命令 << 标识符
... ...
标识符
- wc
wc [选项] [<] [文件名]
-c: 统计字节数
-w: 统计单词数
-l: 统计行数
以上
<
可有可无,会统计文件名的行数、单词数、字符数
wc
手动输入字符,按
ctrl+d
统计输入字符的行数、单词数、字符数
wc << 标识符
...
标识符
手动输入字符,统计输入字符的行数、单词数、字符数
6、管道符
- 多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
- 一个判断命令是否正确执行的做法
ls && echo yes || echo no
- 管道符
命令1 | 命令2
命令1的正确输出作为命令2的操作对象
- 管道符使用示例
ll /etc | more
more 文件名
分屏显示上面的意思是将ll的结果给more执行,即分屏显示ll的结果
netstat -an | grep :80
以上是常用的端口查看工具
netstat -an | grep ESTABLISHED | wc -l
如果有一行,代表有一个连接(这是双管道符嵌套)
7、通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如: [abc]代表一定匹配一个字符,或者a,或者b,或者c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如: [a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如: [^0-9]代表匹配一个不是数字的字符 |
ls支持通配符列出
- Bash中其他特殊字符
符号 | 作用 |
---|---|
'' | 单引号。在单引号中所有的特殊符号,如“$”何“`”(反引号)都没有特殊含义 |
"" | 双引号。在双引号中所有的特殊符号除了后面说的都没有特殊含义,但是“$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”、和“转义符”的特殊含义 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐$(),因为反引号容易看错 |
$() | 和反引号一样,用来引用系统命令 |
# | 在Shell脚本,起到注释作用 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 |
\|转义符,跟在\后面的特殊符号将失去作用,变为普通字符,如\$将输出“$”符号,而不当做变量引用 |
Bash中变量与PHP中的变量的区别是赋值不需要“$”,取值需要“$”
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: