update docs

pull/11/head
Zhang Peng 2019-10-24 18:13:48 +08:00
parent 68e2da1820
commit 34458c1c1c
14 changed files with 317 additions and 287 deletions

View File

@ -1,30 +1,27 @@
# EditorConfig helps developers define and maintain consistent # EditorConfig 用于在 IDE 中检查代码的基本 Code Style
# coding styles between different editors and IDEs # @see: https://editorconfig.org/
# http://editorconfig.org
# 所有文件换行以 Unix like 风格LFwin 格式特定的除外bat # 配置说明:
# 缩进 java 4 个空格,其他所有文件 2 个空格 # 所有文件换行使用 Unix 风格LF*.bat 文件使用 Windows 风格CRLF
# java / sh 文件缩进 4 个空格,其他所有文件缩进 2 个空格
root = true root = true
[*] [*]
# Unix-style newlines with a newline ending every file
end_of_line = lf end_of_line = lf
# Change these settings to your own preference
indent_style = space
indent_size = 2 indent_size = 2
indent_style = tab
# We recommend you to keep these unchanged max_line_length = 120
charset = utf-8 charset = utf-8
trim_trailing_whitespace = true trim_trailing_whitespace = true
insert_final_newline = true insert_final_newline = true
[*.bat] [*.{bat, cmd}]
end_of_line = crlf end_of_line = crlf
[*.{java, sh}] [*.{java, groovy, kt, sh}]
indent_style = tab
indent_size = 4 indent_size = 4
[*.md] [*.md]
max_line_length = 0
trim_trailing_whitespace = false trim_trailing_whitespace = false

2
.gitattributes vendored
View File

@ -70,6 +70,8 @@
*.pdf binary *.pdf binary
*.doc binary *.doc binary
*.docx binary *.docx binary
*.ppt binary
*.pptx binary
*.xls binary *.xls binary
*.xlsx binary *.xlsx binary
*.xmind binary *.xmind binary

40
.gitignore vendored
View File

@ -1,8 +1,42 @@
################ JAVASCRIPT ################ # ---------------------------------------------------------------------
# more gitignore templates see https://github.com/github/gitignore
# ---------------------------------------------------------------------
# ------------------------------- java -------------------------------
# compiled folders
classes
target
logs
.mtj.tmp/
# compiled files
*.class
# bluej files
*.ctxt
# package files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs
hs_err_pid*
# maven plugin temp files
.flattened-pom.xml
# ------------------------------- javascript -------------------------------
# dependencies # dependencies
node_modules node_modules
# temp folders # temp folders
build
dist dist
_book _book
_jsdoc _jsdoc
@ -15,11 +49,11 @@ yarn-error.log*
bundle*.js bundle*.js
################ IDEA ################ # ------------------------------- intellij -------------------------------
.idea .idea
*.iml *.iml
################ Eclipse ################ # ------------------------------- eclipse -------------------------------
.classpath .classpath
.project .project

View File

@ -1,10 +1,10 @@
# Linux 教程 # Linux 教程
> :keyboard: 项目同步维护在 [github](https://github.com/dunwu/linux-tutorial) | [gitee](https://gitee.com/turnon/linux-tutorial) > 🔁 项目同步维护在 [github](https://github.com/dunwu/linux-tutorial) | [gitee](https://gitee.com/turnon/linux-tutorial)
> >
> 📖 [电子书](https://dunwu.github.io/linux-tutorial/) | [电子书(国内)](http://turnon.gitee.io/linux-tutorial/) > 📖 [电子书](https://dunwu.github.io/linux-tutorial/) | [电子书(国内)](http://turnon.gitee.io/linux-tutorial/)
| :wrench: | :shell: | :memo: | :books: | | :wrench: | :shell: | :memo: | 📚 |
| :-------------------: | :-------------------: | :---------------: | :-------------------: | | :-------------------: | :-------------------: | :---------------: | :-------------------: |
| [软件运维](#软件运维) | [运维和脚本](#运维和脚本) | [知识点](#知识点) | [学习资源](#学习资源) | | [软件运维](#软件运维) | [运维和脚本](#运维和脚本) | [知识点](#知识点) | [学习资源](#学习资源) |

View File

@ -1,10 +1,10 @@
# Linux 教程 # Linux 教程
> :keyboard: 项目同步维护在 [github](https://github.com/dunwu/linux-tutorial) | [gitee](https://gitee.com/turnon/linux-tutorial) > 🔁 项目同步维护在 [github](https://github.com/dunwu/linux-tutorial) | [gitee](https://gitee.com/turnon/linux-tutorial)
> >
> 📖 [电子书](https://dunwu.github.io/linux-tutorial/) | [电子书(国内)](http://turnon.gitee.io/linux-tutorial/) > 📖 [电子书](https://dunwu.github.io/linux-tutorial/) | [电子书(国内)](http://turnon.gitee.io/linux-tutorial/)
| :wrench: | :shell: | :memo: | :books: | | :wrench: | :shell: | :memo: | 📚 |
| :-------------------: | :-------------------: | :---------------: | :-------------------: | | :-------------------: | :-------------------: | :---------------: | :-------------------: |
| [软件运维](#软件运维) | [运维和脚本](#运维和脚本) | [知识点](#知识点) | [学习资源](#学习资源) | | [软件运维](#软件运维) | [运维和脚本](#运维和脚本) | [知识点](#知识点) | [学习资源](#学习资源) |

View File

@ -1,6 +1,6 @@
<div align="center"><img width="100px" src="http://dunwu.test.upcdn.net/common/logo/zp.png"/></div> <div align="center"><img width="100px" src="http://dunwu.test.upcdn.net/common/logo/zp.png"/></div>
# Linux Tutorial # linux-tutorial
> Linux 教程 > Linux 教程

View File

@ -7,7 +7,7 @@
- [git-flow 工作流](git-flow.md) - [git-flow 工作流](git-flow.md)
- [Git 常见问题](git-faq.md) - [Git 常见问题](git-faq.md)
## :books: 学习资源 ## 📚 学习资源
### 官方资源 ### 官方资源

View File

@ -3,14 +3,14 @@
<head> <head>
<meta charset="UTF-8"/> <meta charset="UTF-8"/>
<title>Linux Tutorial</title> <title>Linux Tutorial</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
<meta name="description" content="Linux 教程" /> <meta content="Linux 教程" name="description"/>
<meta <meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
name="viewport"
/> />
<link rel="icon" href="http://dunwu.test.upcdn.net/common/logo/zp_50_50.png" type="image/x-icon" /> <link href="http://dunwu.test.upcdn.net/common/logo/zp_50_50.png" rel="icon" type="image/x-icon"/>
<link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css" title="vue" /> <link href="//unpkg.com/docsify/lib/themes/vue.css" rel="stylesheet" title="vue"/>
<style> <style>
h1 + ul { h1 + ul {
display: block !important; display: block !important;
@ -28,20 +28,20 @@
.sidebar-toggle, .sidebar-toggle,
body, body,
.search input { .search input {
color: #6b615f !important; color: #6B615F !important;
background-color: #fff4e6 !important; background-color: #FFF4E6 !important;
} }
.content strong, .content strong,
.sidebar strong, .sidebar strong,
body strong { body strong {
color: #5c5869 !important; color: #5C5869 !important;
} }
</style> </style>
<style> <style>
.cover-main .anchor span { .cover-main .anchor span {
text-align: center; text-align: center;
background-image: -webkit-linear-gradient(left, #ffdcb4, #b96972 25%, #e88a57 50%, #804170 75%, #a596cd); background-image: -webkit-linear-gradient(left, #FFDCB4, #B96972 25%, #E88A57 50%, #804170 75%, #A596CD);
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-background-size: 200% 100%; -webkit-background-size: 200% 100%;
@ -51,17 +51,17 @@
} }
.cover-main blockquote p { .cover-main blockquote p {
color: #5c5869; color: #5C5869;
font-family: "Arial", 隶书, serif; font-family: "Arial", 隶书, serif;
} }
.cover-main ul a:hover { .cover-main ul a:hover {
color: #fe4165 !important; color: #FE4165 !important;
} }
.cover-main p a:hover { .cover-main p a:hover {
text-align: center; text-align: center;
background-image: -webkit-linear-gradient(left, #ffdcb4, #b96972 25%, #e88a57 50%, #804170 75%, #a596cd); background-image: -webkit-linear-gradient(left, #FFDCB4, #B96972 25%, #E88A57 50%, #804170 75%, #A596CD);
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-background-size: 200% 100%; -webkit-background-size: 200% 100%;
@ -71,13 +71,13 @@
/* content 样式内容 */ /* content 样式内容 */
.sidebar a, .sidebar a,
.content a { .content a {
color: #399ab2 !important; color: #399AB2 !important;
text-decoration: none !important; text-decoration: none !important;
} }
.sidebar a:hover, .sidebar a:hover,
.content a:hover { .content a:hover {
color: #fe4165 !important; color: #FE4165 !important;
text-decoration: underline !important; text-decoration: underline !important;
} }
@ -86,7 +86,7 @@
.content h3 :hover, .content h3 :hover,
.content h4 :hover { .content h4 :hover {
text-align: center; text-align: center;
background-image: -webkit-linear-gradient(left, #ffdcb4, #b96972 25%, #e88a57 50%, #804170 75%, #a596cd); background-image: -webkit-linear-gradient(left, #FFDCB4, #B96972 25%, #E88A57 50%, #804170 75%, #A596CD);
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-background-size: 200% 100%; -webkit-background-size: 200% 100%;
@ -106,14 +106,14 @@
.content h1 a, .content h1 a,
.content h1 span { .content h1 span {
color: #399ab2 !important; color: #399AB2 !important;
font-size: 30px; font-size: 30px;
text-shadow: 2px 2px 5px grey; text-shadow: 2px 2px 5px grey;
} }
.content h2 a, .content h2 a,
.content h2 span { .content h2 span {
color: #60497c !important; color: #60497C !important;
font-size: 26px; font-size: 26px;
text-shadow: 2px 2px 5px grey; text-shadow: 2px 2px 5px grey;
} }
@ -128,7 +128,7 @@
.content h4 a, .content h4 a,
.content h4 span { .content h4 span {
font-size: 18px; font-size: 18px;
color: #78943a; color: #78943A;
text-shadow: 2px 2px 5px grey; text-shadow: 2px 2px 5px grey;
} }
@ -147,8 +147,8 @@
.content blockquote { .content blockquote {
display: block; display: block;
padding: 0 16px; padding: 0 16px;
border-left: 8px solid #dddfe4; border-left: 8px solid #DDDFE4;
background: #fff2c9; background: #FFF2C9;
overflow: auto; overflow: auto;
} }
@ -156,7 +156,7 @@
padding-left: 0 !important; padding-left: 0 !important;
padding-right: 0 !important; padding-right: 0 !important;
border-radius: 8px; border-radius: 8px;
box-shadow: 1px 1px 20px 3px #dddddd !important; box-shadow: 1px 1px 20px 3px #DDDDDD !important;
} }
.content code { .content code {
@ -169,13 +169,13 @@
display: table; display: table;
padding-left: 0 !important; padding-left: 0 !important;
padding-right: 0 !important; padding-right: 0 !important;
box-shadow: 2px 2px 20px 6px #dddddd !important; box-shadow: 2px 2px 20px 6px #DDDDDD !important;
} }
.content th { .content th {
font-weight: bold; font-weight: bold;
font-size: 16px; font-size: 16px;
background-color: #cce6b6; background-color: #CCE6B6;
} }
</style> </style>
<style> <style>
@ -214,22 +214,18 @@
<div id="app">正在加载...</div> <div id="app">正在加载...</div>
<script> <script>
window.$docsify = { window.$docsify = {
name: "Linux Tutorial", name: 'Linux Tutorial',
repo: "https://github.com/dunwu/linux-tutorial", repo: 'https://github.com/dunwu/linux-tutorial',
logo: "http://dunwu.test.upcdn.net/common/logo/zp_100_100.png", logo: 'http://dunwu.test.upcdn.net/common/logo/zp_100_100.png',
auto2top: true, auto2top: true,
coverpage: "coverpage.md", coverpage: 'coverpage.md',
maxLevel: 4, maxLevel: 4,
subMaxLevel: 4, subMaxLevel: 4,
formatUpdated: "{MM}/{DD} {HH}:{mm}", formatUpdated: '{MM}/{DD} {HH}:{mm}',
search: { search: {
maxAge: 86400000, maxAge: 86400000, paths: ['/'], placeholder: '🔍 搜索', noData: '没有结果!', depth: 4
paths: ["/"], }
placeholder: "🔍 搜索",
noData: "没有结果!",
depth: 4
} }
};
</script> </script>
<script src="//unpkg.com/docsify/lib/docsify.min.js"></script> <script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
<script src="//unpkg.com/docsify/lib/plugins/emoji.js"></script> <script src="//unpkg.com/docsify/lib/plugins/emoji.js"></script>
@ -237,6 +233,7 @@
<script src="//unpkg.com/docsify/lib/plugins/search.js"></script> <script src="//unpkg.com/docsify/lib/plugins/search.js"></script>
<!--代码高亮--> <!--代码高亮-->
<!--@see https://github.com/PrismJS/prism -->
<script src="//unpkg.com/prismjs/components/prism-basic.min.js"></script> <script src="//unpkg.com/prismjs/components/prism-basic.min.js"></script>
<script src="//unpkg.com/prismjs/components/prism-bash.min.js"></script> <script src="//unpkg.com/prismjs/components/prism-bash.min.js"></script>
<script src="//unpkg.com/prismjs/components/prism-java.min.js"></script> <script src="//unpkg.com/prismjs/components/prism-java.min.js"></script>

View File

@ -250,7 +250,7 @@ touch ex2
> ln 命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。 > ln 命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
> >
> 注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。 > 🔔 注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
> >
> 参考http://man.linuxde.net/ln > 参考http://man.linuxde.net/ln

View File

@ -150,7 +150,7 @@ yum 的默认源是国外的,下载速度比较慢,所以最好替换为一
| <http://mirrors.163.com/> | Centos6http://mirrors.aliyun.com/repo/Centos-6.repo<br>Centos7http://mirrors.aliyun.com/repo/Centos-7.repo | | <http://mirrors.163.com/> | Centos6http://mirrors.aliyun.com/repo/Centos-6.repo<br>Centos7http://mirrors.aliyun.com/repo/Centos-7.repo |
| <http://mirrors.aliyun.com/> | Centos6http://mirrors.163.com/.help/CentOS6-Base-163.repo<br>Centos7http://mirrors.163.com/.help/CentOS7-Base-163.repo | | <http://mirrors.aliyun.com/> | Centos6http://mirrors.163.com/.help/CentOS6-Base-163.repo<br>Centos7http://mirrors.163.com/.help/CentOS7-Base-163.repo |
> 注意Cento5 已废弃,只能使用 http://vault.centos.org/ 替换,但由于是国外镜像,速度较慢。 > 🔔 注意Cento5 已废弃,只能使用 http://vault.centos.org/ 替换,但由于是国外镜像,速度较慢。
替换方法,以 aliyun CentOS7 为例: 替换方法,以 aliyun CentOS7 为例:

View File

@ -5,7 +5,7 @@ date: 2019-03-06
# Linux 典型运维应用 # Linux 典型运维应用
> :bulb: 如果没有特殊说明,本文的案例都是针对 Centos 发行版本。 > 💡 如果没有特殊说明,本文的案例都是针对 Centos 发行版本。
## 网络操作 ## 网络操作

View File

@ -5,7 +5,7 @@
> 本文主要介绍 bash 的语法,对于 linux 指令不做任何介绍。 > 本文主要介绍 bash 的语法,对于 linux 指令不做任何介绍。
> >
> :notebook: 本文已归档到:「[blog](https://github.com/dunwu/blog)」 > :notebook: 本文已归档到:「[blog](https://github.com/dunwu/blog)」
> :keyboard: 本文的源码已归档到 [linux-tutorial](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos) > 🔁 本文的源码已归档到 [linux-tutorial](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos)
``` ```
███████╗██╗ ██╗███████╗██╗ ██╗ ███████╗██╗ ██╗███████╗██╗ ██╗
@ -173,7 +173,7 @@ chmod +x /path/to/script.sh #使脚本具有执行权限
这种方式要求脚本文件的第一行必须指明运行该脚本的程序,比如: 这种方式要求脚本文件的第一行必须指明运行该脚本的程序,比如:
**:keyboard: 『示例源码』** [helloworld.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/helloworld.sh) **🔁 『示例源码』** [helloworld.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/helloworld.sh)
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
@ -207,7 +207,7 @@ shell 语法中,注释是特殊的语句,会被 shell 解释器忽略。
- 单行注释 - 以 `#` 开头,到行尾结束。 - 单行注释 - 以 `#` 开头,到行尾结束。
- 多行注释 - 以 `:<<EOF` 开头,到 `EOF` 结束。 - 多行注释 - 以 `:<<EOF` 开头,到 `EOF` 结束。
**:keyboard: 『示例源码』** [comment-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/comment-demo.sh) **🔁 『示例源码』** [comment-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/comment-demo.sh)
```bash ```bash
#-------------------------------------------- #--------------------------------------------
@ -293,7 +293,7 @@ echo `pwd`
# Output:(当前目录路径) # Output:(当前目录路径)
``` ```
**:keyboard: 『示例源码』** [echo-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/echo-demo.sh) **🔁 『示例源码』** [echo-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/echo-demo.sh)
### 2.4. printf ### 2.4. printf
@ -301,7 +301,7 @@ printf 用于格式化输出字符串。
默认printf 不会像 echo 一样自动添加换行符,如果需要换行可以手动添加 `\n` 默认printf 不会像 echo 一样自动添加换行符,如果需要换行可以手动添加 `\n`
**:keyboard: 『示例源码』** [printf-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/printf-demo.sh) **🔁 『示例源码』** [printf-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/printf-demo.sh)
```bash ```bash
# 单引号 # 单引号
@ -619,7 +619,7 @@ echo ${nums[@]}
### 5.6. 数组示例源码 ### 5.6. 数组示例源码
**:keyboard: 『示例源码』** [array-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/array-demo.sh) **🔁 『示例源码』** [array-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos/array-demo.sh)
## 6. 运算符 ## 6. 运算符
@ -640,7 +640,7 @@ echo ${nums[@]}
**注意:**条件表达式要放在方括号之间,并且要有空格,例如: `[$x==$y]` 是错误的,必须写成 `[ $x == $y ]` **注意:**条件表达式要放在方括号之间,并且要有空格,例如: `[$x==$y]` 是错误的,必须写成 `[ $x == $y ]`
**:keyboard: 『示例源码』** [operator-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo.sh) **🔁 『示例源码』** [operator-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo.sh)
```bash ```bash
x=10 x=10
@ -698,7 +698,7 @@ fi
| `-ge` | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | `[ $a -ge $b ]` 返回 false。 | | `-ge` | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | `[ $a -ge $b ]` 返回 false。 |
| `-le` | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | `[ $a -le $b ]`返回 true。 | | `-le` | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | `[ $a -le $b ]`返回 true。 |
**:keyboard: 『示例源码』** [operator-demo2.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo2.sh) **🔁 『示例源码』** [operator-demo2.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo2.sh)
```bash ```bash
x=10 x=10
@ -763,7 +763,7 @@ fi
| `-o` | 或运算,有一个表达式为 true 则返回 true。 | `[ $a -lt 20 -o $b -gt 100 ]` 返回 true。 | | `-o` | 或运算,有一个表达式为 true 则返回 true。 | `[ $a -lt 20 -o $b -gt 100 ]` 返回 true。 |
| `-a` | 与运算,两个表达式都为 true 才返回 true。 | `[ $a -lt 20 -a $b -gt 100 ]` 返回 false。 | | `-a` | 与运算,两个表达式都为 true 才返回 true。 | `[ $a -lt 20 -a $b -gt 100 ]` 返回 false。 |
**:keyboard: 『示例源码』** [operator-demo3.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo3.sh) **🔁 『示例源码』** [operator-demo3.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo3.sh)
```bash ```bash
x=10 x=10
@ -813,7 +813,7 @@ fi
| `&&` | 逻辑的 AND | `[[ ${x} -lt 100 && ${y} -gt 100 ]]` 返回 false | | `&&` | 逻辑的 AND | `[[ ${x} -lt 100 && ${y} -gt 100 ]]` 返回 false |
| `||` | 逻辑的 OR | `[[ ${x} -lt 100 || ${y} -gt 100 ]]` 返回 true | | `||` | 逻辑的 OR | `[[ ${x} -lt 100 || ${y} -gt 100 ]]` 返回 true |
**:keyboard: 『示例源码』** [operator-demo4.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo4.sh) **🔁 『示例源码』** [operator-demo4.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo4.sh)
```bash ```bash
x=10 x=10
@ -854,7 +854,7 @@ fi
| `-n` | 检测字符串长度是否为 0不为 0 返回 true。 | `[ -n $a ]` 返回 true。 | | `-n` | 检测字符串长度是否为 0不为 0 返回 true。 | `[ -n $a ]` 返回 true。 |
| `str` | 检测字符串是否为空,不为空返回 true。 | `[ $a ]` 返回 true。 | | `str` | 检测字符串是否为空,不为空返回 true。 | `[ $a ]` 返回 true。 |
**:keyboard: 『示例源码』** [operator-demo5.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo5.sh) **🔁 『示例源码』** [operator-demo5.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo5.sh)
```bash ```bash
x="abc" x="abc"
@ -925,7 +925,7 @@ fi
| -s file | 检测文件是否为空(文件大小是否大于 0不为空返回 true。 | `[ -s $file ]` 返回 true。 | | -s file | 检测文件是否为空(文件大小是否大于 0不为空返回 true。 | `[ -s $file ]` 返回 true。 |
| -e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | `[ -e $file ]` 返回 true。 | | -e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | `[ -e $file ]` 返回 true。 |
**:keyboard: 『示例源码』** [operator-demo6.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo6.sh) **🔁 『示例源码』** [operator-demo6.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/operator/operator-demo6.sh)
```bash ```bash
file="/etc/hosts" file="/etc/hosts"
@ -1036,13 +1036,13 @@ fi
# Output: 10 < 20 # Output: 10 < 20
``` ```
**:keyboard: 『示例源码』** [if-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/if-demo.sh) **🔁 『示例源码』** [if-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/if-demo.sh)
#### `case` #### `case`
如果你需要面对很多情况,分别要采取不同的措施,那么使用`case`会比嵌套的`if`更有用。使用`case`来解决复杂的条件判断,看起来像下面这样: 如果你需要面对很多情况,分别要采取不同的措施,那么使用`case`会比嵌套的`if`更有用。使用`case`来解决复杂的条件判断,看起来像下面这样:
**:keyboard: 『示例源码』** [case-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/case-demo.sh) **🔁 『示例源码』** [case-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/case-demo.sh)
```bash ```bash
exec exec
@ -1114,7 +1114,7 @@ done
# 将 /home/zp 目录下所有 sh 文件拷贝到 /home/zp/scripts # 将 /home/zp 目录下所有 sh 文件拷贝到 /home/zp/scripts
``` ```
**:keyboard: 『示例源码』** [for-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/for-demo.sh) **🔁 『示例源码』** [for-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/for-demo.sh)
#### `while`循环 #### `while`循环
@ -1151,7 +1151,7 @@ done
# 81 # 81
``` ```
**:keyboard: 『示例源码』** [while-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/while-demo.sh) **🔁 『示例源码』** [while-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/while-demo.sh)
#### `until`循环 #### `until`循环
@ -1171,7 +1171,7 @@ done
# 4 # 4
``` ```
**:keyboard: 『示例源码』** [until-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/until-demo.sh) **🔁 『示例源码』** [until-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/until-demo.sh)
#### `select`循环 #### `select`循环
@ -1219,7 +1219,7 @@ Choose the package manager: 2
Enter the package name: gitbook-cli Enter the package name: gitbook-cli
``` ```
**:keyboard: 『示例源码』** [select-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/select-demo.sh) **🔁 『示例源码』** [select-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/select-demo.sh)
#### `break``continue` #### `break``continue`
@ -1229,7 +1229,7 @@ Enter the package name: gitbook-cli
> >
> `continue`语句用来跳过某次迭代。 > `continue`语句用来跳过某次迭代。
**:keyboard: 『示例源码』** [break-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/break-demo.sh) **🔁 『示例源码』** [break-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/break-demo.sh)
```bash ```bash
# 查找 10 以内第一个能整除 2 和 3 的正整数 # 查找 10 以内第一个能整除 2 和 3 的正整数
@ -1244,7 +1244,7 @@ done
# Output: 6 # Output: 6
``` ```
**:keyboard: 『示例源码』** [continue-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/continue-demo.sh) **🔁 『示例源码』** [continue-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/statement/continue-demo.sh)
```bash ```bash
# 打印10以内的奇数 # 打印10以内的奇数
@ -1273,14 +1273,14 @@ bash 函数定义语法如下:
} }
``` ```
> :bulb: 说明: > 💡 说明:
> >
> 1. 函数定义时,`function` 关键字可有可无。 > 1. 函数定义时,`function` 关键字可有可无。
> 2. 函数返回值 - return 返回函数返回值返回值类型只能为整数0-255。如果不加 return 语句shell 默认将以最后一条命令的运行结果,作为函数返回值。 > 2. 函数返回值 - return 返回函数返回值返回值类型只能为整数0-255。如果不加 return 语句shell 默认将以最后一条命令的运行结果,作为函数返回值。
> 3. 函数返回值在调用该函数后通过 `$?` 来获得。 > 3. 函数返回值在调用该函数后通过 `$?` 来获得。
> 4. 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。 > 4. 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
**:keyboard: 『示例源码』** [function-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos//function/function-demo.sh) **🔁 『示例源码』** [function-demo.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos//function/function-demo.sh)
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
@ -1346,7 +1346,7 @@ the result is: 100
| `$#` | 不包括`$0`在内的位置参数的个数 | | `$#` | 不包括`$0`在内的位置参数的个数 |
| `$FUNCNAME` | 函数名称(仅在函数内部有值) | | `$FUNCNAME` | 函数名称(仅在函数内部有值) |
**:keyboard: 『示例源码』** [function-demo2.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos//function/function-demo2.sh) **🔁 『示例源码』** [function-demo2.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos//function/function-demo2.sh)
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
@ -1406,7 +1406,7 @@ $ ./function-demo2.sh 10 20
| `$-` | 返回 Shell 使用的当前选项,与 set 命令功能相同。 | | `$-` | 返回 Shell 使用的当前选项,与 set 命令功能相同。 |
| `$?` | 函数返回值 | | `$?` | 函数返回值 |
**:keyboard: 『示例源码』** [function-demo3.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos//function/function-demo3.sh) **🔁 『示例源码』** [function-demo3.sh](https://github.com/dunwu/linux-tutorial/tree/master/codes/shell/demos//function/function-demo3.sh)
```bash ```bash
runner() { runner() {
@ -1644,7 +1644,7 @@ $ ./my_script
有时我们值需要 debug 脚本的一部分。这种情况下,使用`set`命令会很方便。这个命令可以启用或禁用选项。使用`-`启用选项,`+`禁用选项: 有时我们值需要 debug 脚本的一部分。这种情况下,使用`set`命令会很方便。这个命令可以启用或禁用选项。使用`-`启用选项,`+`禁用选项:
**:keyboard: 『示例源码』** [debug-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/debug-demo.sh) **🔁 『示例源码』** [debug-demo.sh](https://github.com/dunwu/linux-tutorial/blob/master/codes/shell/demos/debug-demo.sh)
```bash ```bash
# 开启 debug # 开启 debug

View File

@ -190,7 +190,7 @@ Nexus 中的仓库有以下类型:
</distributionManagement> </distributionManagement>
``` ```
> 注意: > 🔔 注意:
> >
> - `<repository>``<snapshotRepository>` 的 id 必须和 `settings.xml` 配置文件中的 `<server>` 标签中的 id 匹配。 > - `<repository>``<snapshotRepository>` 的 id 必须和 `settings.xml` 配置文件中的 `<server>` 标签中的 id 匹配。
> - `<url>` 标签的地址需要和 maven 私服的地址匹配。 > - `<url>` 标签的地址需要和 maven 私服的地址匹配。

View File

@ -314,7 +314,7 @@ Cmd+C、Cmd+V、Cmd+X、Cmd+A、Cmd+Z。
打开 CheatSheet 后,长按 command 键,会弹出当前应用程序的所有快捷键。我们还可以对这些快捷键进行保存。 打开 CheatSheet 后,长按 command 键,会弹出当前应用程序的所有快捷键。我们还可以对这些快捷键进行保存。
## :books: 学习资源 ## 📚 学习资源
- [Awesome Mac](https://github.com/jaywcjlove/awesome-mac) - [Awesome Mac](https://github.com/jaywcjlove/awesome-mac)
- [awesome-macos-command-line](https://github.com/herrbischoff/awesome-macos-command-line) - [awesome-macos-command-line](https://github.com/herrbischoff/awesome-macos-command-line)