shell基础
-
shell是一个命令行解释器,它为用户提供了一个向
linux内核发送请求以便运行程序的界面系统级程序 -
用户可以用shell来启动、挂起、停止或者编写一些程序
-
Shell还是一个功能强大的变成语言
-
Shell是解释执行的脚本语言,在Shell中可以直接调用Linux命令
echo
-
输出命令
-
-e:表示激活转义字符
echo hello
echo -e "a\tb"
编写执行shell
- hello.sh
所有
shell文件开头都需要#! /bin/bash表示这是一个shell脚本,需要使用/bin/bash去执行这个文件。
#! /bin/bash
echo hello
// 通过bash调用运行脚本
sh hello.sh
// 赋予文件可执行权限 直接运行
chmode 755 hello.sh
chmode u+x hello.sh
./hello.sh
别名
- 命令可以指定别名,也就是自定义命令快捷方式
- 使用
alias [快捷方式]=[原始命令]指定,比如alias cp="cp -i"意思就是说指定cp命令为执行cp -i - 将快捷方式写入环境变量配置文件
vi ~/.bashrc,永久保存命令的快捷方式。 source ~/.bashrc刷新文件执行,执行完之后可以就可以通过快捷方式调用了。- 按照
$PATH环境变量定义的目录查找顺序执行找到的第一命令 - 通过
unalias [命令快捷方式]可以删除命令别名
命令的生效顺序
按照以下顺序进行匹配命令
- 绝对路径或者相对路径
- 别名
bash内部命令- 按照
$PATH环境变量定义的目录查找顺序进行命令查找
命令快捷键
| 命令 | 含义 |
|---|---|
ctrl+c | 强制终止当前命令 |
ctrl+l | 清屏 |
ctrl+a | 光标移动到命令行首 |
ctrl+e | 光标移动到命令行尾 |
ctrl+u | 从光标当前位置删除到行首(不包含光标当前位置) |
历史命令
-
hisotry [选项] [历史命令保存文件] -
选项
-c清空历史命令-w把缓存的历史命令写入历史命令保存文件-~/.bash_history
-
默认保存1000条,可以通过修改
vi /etc/profile文件中的HISSIZE=10000进行修改默认保存数量。
调用
- 使用上下箭头调用以前的历史命令
- 使用
!n重复执行第n条历史命令(n表示history命令中的号) - 使用
!!重复执行上一条命令 - 使用
!字符重复执行最后一条以该字符串开头的命令开头的命令(类似js中的startsWith,从后往前匹配找到以字符开头的命令进行执行)
输出重定向
标准输入输出
| 设备 | 设备文件名 | 文件描述符 | 类型 |
|---|---|---|---|
| 设备 | 设备文件名 | 文件描述符 | 类型 |
| 键盘 | /dev/stdin | 0 | 标注输入 |
| 显示器 | /dev/stdout | 1 | 标准输出 |
| 显示器 | /dev/stderr | 2 | 标准错误输出 |
| 类型 | 符号 | 作用 |
|---|---|---|
| 标准输出重定向 | 命令 > 文件 | 以覆盖的方式,将命令的正确输入结果输出到指定的文件或者设备中 |
| 标准输出重定向 | 命令 >> 文件 | 以追加的方式,将命令的正确输入结果输出到指定的文件或者设备中 |
| 正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确的输出和错误的输出都保存在同一个文件中 (命令 > 文件表示将命令的执行结果输入到文件中去,正常是可以成功写入的。但是如果出现错误就不能写入了。2表示错误输出,2>&1的意思是说将错误输出先输入到正确输出中去,然后在统一输出,这样就可以成功输出到文件中去了) |
| 正确输出和错误输出同时保存 | 命令 >> 文件 2>&1 | 以追加的方式,把正确的输出和错误的输出都保存在同一个文件中 |
输入重定向
wc命令的功能为统计指定文件的行数、单词数,字节数,并将统计结果显示输出。
命令<可以作为输出重定向。
比如wc < 1.txt表示将1.txt输入给wc命令执行获得结果。
管道符号
多命令顺序执行
| 多命令执行符 | 格式 | 含义 | 案例 |
|---|---|---|---|
; | 命令1;命令2;命令3; | 表示多命令执行,命令之间没有任何联系 | echo 1;echo 2; |
&& | 命令1&&命令2&&命令3 | 表示逻辑与,只有第一个命令正确执行才会执行下一个命令 | echo 1 && echo 2; |
|| | 命令1|| 命令2 || 命令3 | 表示逻辑或,当第一个命令错误的时候才会执行下一个命令 | echo 1 || echo 2; |
管道符号
-
管道符号
|前一个命令的输出结果会输入给下一个命令 -
命令1 | 命令2
ls /etc | more
# 表示将ls \etc的输出内容流给more进行分页查看。
通配符
- 匹配文件和文件名
| 通配符 | 作用 |
|---|---|
? | 匹配任意一个字符 |
* | 匹配0或任意一个字符 |
[] | 匹配括号中的任意一个字符 |
[-] | 匹配[]中的任意一个字符-代表范围,比如[0-9]代表匹配0-9中任意一个字符 |
[^] | 匹配不是中括号中的字符(表示非) |
其他符号
| 符号 | 作用 |
|---|---|
'' | 单引号,在单引号中的所有的特殊字符,都表示没有特殊含义。普通字符串 |
"" | 双引号,在双引号中的所有的特殊字符,都表示没有特殊含义。但是$,`,\除外,拥有调用变量值,引用命令和转义的含义 |
| ` ` | 反引号,括起来是系统命令 |
| $() | 和反引号一样 |
| # | 在shell脚本中#表示注释 |
| $ | 表示调用变量 |
| \ | 转译字符 |
echo '$PATH' # $PATH
echo "$PATH" # /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin