Shell:基础入门
2019-08-18 本文已影响0人
春暖花已开
说明 | 时间 |
---|---|
首次发布 | 2019年08月18日 |
最近更新 | 2020年07月01日 |
写在最前:此为笔者系统学习shell的笔记,初衷是方便自己查阅和复习。囿于笔者属于入门级别,难免有理解不对的地方,望留言指正。
一、升级bash
由于macOS自带bash版本为3.x,不支持 关联数组(bash V4.0+)
等,那么需要先升级bash。
-
- 查看当前版本
bash --version
-
- Homebrew安装最新bash
brew install bash
-
- 打开
/etc/shells
文档,将/usr/local/bin/bash
添加进去。
# List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/dash /bin/ksh /bin/sh /bin/tcsh /bin/zsh #新添加的 /usr/local/bin/bash
- 打开
-
- 设置默认Shell
如果想修改root用户,执行以下操作:chsh -s /usr/local/bin/bash
注意:以上操作完之后,需要重启终端才能生效。sudo chsh -s /usr/local/bin/bash
-
- 使用新版本Bash时,需要在shebang中明确指定新版本
/usr/local/bin/bash
#!/usr/local/bin/bash echo $BASH_VERSION
- 使用新版本Bash时,需要在shebang中明确指定新版本
二、shell特点
- 1、快捷键
组合键 | 功能 |
---|---|
Ctrl+A | 光标移动到命令最前面 |
Ctrl+E | 光标移动到命令最后面 |
Ctrl+L | 清屏 |
Ctrl+K | 清除光标之后的内容 |
Ctrl+U | 清除本次输入的所有内容 |
- 2、前后台作业控制
项目 | 功能 |
---|---|
Ctrl+C | 结束进程 |
Ctrl+Z | 将当前进程切换到后台 |
jobs | 查看所有的进程 |
- 3、输入输出重定向
项目 | 功能 |
---|---|
0 | 文件描述符,表示标准输入(stdin) |
1 | 文件描述符,表示标准输出(stdout) |
2 | 文件描述符,表示标准错误(stderr) |
> | 默认为标准输出重定向,与 1> 相同 |
>> | 追加输出 |
&>file | 把 标准输出 和 标准错误输出 都重定向到文件file中 |
1>&2 | 正确返回值传递给2输出通道,&2表示2输出通道 |
2>&1 | 错误返回值传递给1输出通道,同样&1表示1输出通道 |
cat < /etc/hosts | 将hosts的内容输入到cat |
cat < /etc/hosts > HOST.txt | 将hosts的内容输入到cat,之后定向到HOST.txt,而不输出到屏幕 |
cat > file.txt <<-EOF | 多行输入 |
cat > file.txt <<-EOF | 多行输入,并把文本保存到file.txt |
-
4、运算符
-
a.
|
管道符号,是unix一个很强大的功能,符号为一条竖线:"|"。
格式:command 1 | command 2
他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2。
如:ls -s | sort -n
-
b.
&&
运算符:
格式command1 && command2
&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”。
-
c.
||
运算符:
格式command1 || command2
||则与&&相反。如果||左边的命令(command1)未执行成功,那么就执行||右边的命令(command2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。
-
d.
()
运算符:
如果希望把几个命令合在一起执行,shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。
格式:(command1;command2;command3....) 多个命令之间用;分隔
说明:
- 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
- () 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
- 命令组合常和命令执行控制结合起来使用。
-
-
5、通配符
*(匹配任意多个字符)、?(匹配任意一个字符)、[](匹配中括号里的任意一个字符)、\(用作转义)和正则表达式的含义一致。
()表示在子shell中执行;
{}表示集合,如touch file{1..9}
-
6、检查和调试
查看脚本语法是否有错误:bash -n scriptName.sh
跟踪执行:
sh -vx scriptName.sh
二、常用命令
-
1、
tee
[-a] 追加;[-i ] 忽略SIGINT信号。
tee
跟1>
比较相似,最大不同>
重定向只会将内容重定向到文件,而不会在终端输出;而tee
命令会将内容重定向到文件的同时,在终端输出。 -
2、
grep
- 3、
sed
- 4、
awk