Shell脚本学习笔记
## 前言 > 在计算机行业,很多软件或工具提供命令操作方式,如`Docker`、`Git`、`No
渲染中...
## 前言
> 在计算机行业,很多软件或工具提供命令操作方式,如`Docker`、`Git`、`Node`等等,并且Linux系统的操作也是使用命令交互的,这些命令基本上都是`Shell`命令。所以在系统、软件运维岗位的工作人员,会有很多使用Shell命令的场景,而且`Shell脚本`对于程序员来说也算是大佬必备技能。
>
> 详细学习`Shell脚本`的目的不是为了打几行命令,而是为了能够编写复杂的`Shell脚本程序`,将一些重复性的`命令执行的过程和逻辑`打包起来,形成一个可执行的程序,起到自动化的效果,减少我们重复性的工作,即:**减少敲重复性的命令的工作。** 并且,本文的最终目标就是 **能够阅读别人的脚本源码,并独立编写自己的脚本文件。**
>
> **声明:本文基于个人总结,如有错误欢迎指正!**
>
> **提示**:读本文可能会让很多人认为讲的就是Linux命令,其实也没错,因为咱们平时使用的Linux命令就是一些Shell脚本命令。我觉得不应该叫Linux命令,应该叫Shell命令,只不过大多数人接触Shell命令是从接触Linux开始的,所以主观的将其称之为Linux命令。同样,如果我的理解有误,欢迎指正。
>
> **另外**:想学习Linux命令的同学可以阅读我的笔记:《[Linux命令记录](https://oldmoon.top/post/13)》。
- 部分内容来自【[Shell 教程 | 菜鸟教程](https://www.runoob.com/linux/linux-shell.html)】
> 持续更新中……
## 简介
> 以**能够阅读别人的脚本源码,并独立编写自己的脚本文件**为最终目标,本文章节将以编写脚本所需知识点来划分。详情请查看全文。
<!-- more -->
## 常用基础命令
> 此部分介绍一些常用的Shell命令。
### echo
- 作用是输出(控制台打印)一些数据。其后可以跟一些固定数据,也可以输出变量值,如:
- `echo hello_world`:输出`hello_world`。
- `echo $PATH`:输出变量`PATH`的值,**$PATH**在参数获取中会讲到。
## 参数获取
> 脚本文件执行时可以传入参数,比如常见的`cd /usr/local`,其中`/usr/local`就是一个参数。
>
> 相对应的,有传入参数,脚本源码就需要获取参数,脚本内部参数获取统一般是使用`$`符号,几种常见用法下面逐一说明。
### $0
- 作用是获取脚本文件名称,一般用于脚本文件内部。Linux交互界面执行`echo $0`会打印`-bash`,大概含义是:默认的`Shell编译器`是`bash`程序。
### $1
- 其中`1`可以换成任意正整数。
- 作用是获取脚本执行时传入的第一个参数,同理`$2`则是获取第二个参数,`$n`就是获取第n个参数(`n代表数字`)。
### $#
- 作用是获取全部参数,可将其返回值视为数组,每个参数就是数组的一个元素,常用于脚本内部`for`循环遍历每个参数。
### $*
- 作用是获取全部参数,但与`$#`不同的是,返回值是全部参数作为一个整体的字符串。
### $PATH
- 等同于`${PATH}`,其中`{}`可以省略,作用是获取名为`PATH`的变量的值。在Linux交互界面可以通过`echo $PATH`打印变量`PATH`的值,提示:`PATH`是Linux一个环境变量(全局变量)。
- 该用法常见于提前定义好变量,然后通过变量名去获取其变量值。
## 算术运算符
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
|运算符|说明|举例|
|---|--|----|
|+|加法|`expr $a + $b` 结果为 30|
|-|减法|`expr $a - $b` 结果为 -10|
|*|乘法|`expr $a \* $b` 结果为 200|
|/|除法|`expr $b / $a` 结果为 2|
|%|取余|`expr $b % $a` 结果为 0|
|=|赋值|`a=$b` 把变量 b 的值赋给 a|
|==|相等。用于比较两个数字,相同则返回 true|`$a == $b` 返回 false|
|!=|不相等。用于比较两个数字,不相同则返回 true|`$a != $b` 返回 true|
## 关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
|运算符|说明|举例|
|---|--|----|
|-eq|检测两个数是否相等,相等返回 true|`$a -eq $b` 返回 false|
|-ne|检测两个数是否不相等,不相等返回 true|`$a -ne $b` 返回 true|
|-gt|检测左边的数是否大于右边的,如果是,则返回 true|`$a -gt $b` 返回 false|
|-lt|检测左边的数是否小于右边的,如果是,则返回 true|`$a -lt $b` 返回 true|
|-ge|检测左边的数是否大于等于右边的,如果是,则返回 true|`$a -ge $b` 返回 false|
|-le|检测左边的数是否小于等于右边的,如果是,则返回 true|`$a -le $b` 返回 true|
## 逻辑控制
### fi
if 语句语法格式:
```bash
if condition
then
command1
command2
...
commandN
fi
```
写成一行(适用于终端命令提示符):
`if [$(ps -ef | grep -c "ssh") -gt 1]; then echo "true"; fi`
末尾的 `fi` 就是 `if` 倒过来拼写,后面还会遇到类似的。
### if else
if else 语法格式:
```bash
if condition
then
command1
command2
...
commandN
else
command
fi
```
### if else-if else
if else-if else 语法格式:
```bash
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
```
`if else` 的 `[...]` 判断语句中大于使用 `-gt`,小于使用 `-lt`。
```bash
if [ "$a" -gt "$b" ]; then
...
fi
```
如果使用 `((...))` 作为判断语句,大于和小于可以直接使用 `>` 和 `<`。
```bash
if (( a > b )); then
...
fi
```
### for 循环
与其他编程语言类似,Shell支持for循环。
for循环一般格式为:
```bash
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
```
写成一行:
`for var in item1 item2 ... itemN; do command1; command2… done;`
当变量值在列表里,`for` 循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的 shell 命令和语句。`in` 列表可以包含替换、字符串和文件名。
`in`列表是可选的,如果不用它,`for`循环使用命令行的位置参数。
## 脚本语法
## 实战案例END
评论
登录后查看和发表评论
前往登录