在计算机行业,很多软件或工具提供命令操作方式,如
Docker
、Git
、Node
等等,并且Linux系统的操作也是使用命令交互的,这些命令基本上都是Shell
命令。所以在系统、软件运维岗位的工作人员,会有很多使用Shell命令的场景,而且Shell脚本
对于程序员来说也算是大佬必备技能。详细学习
Shell脚本
的目的不是为了打几行命令,而是为了能够编写复杂的Shell脚本程序
,将一些重复性的命令执行的过程和逻辑
打包起来,形成一个可执行的程序,起到自动化的效果,减少我们重复性的工作,即:减少敲重复性的命令的工作。 并且,本文的最终目标就是 能够阅读别人的脚本源码,并独立编写自己的脚本文件。声明:本文基于个人总结,如有错误欢迎指正!
提示:读本文可能会让很多人认为讲的就是Linux命令,其实也没错,因为咱们平时使用的Linux命令就是一些Shell脚本命令。我觉得不应该叫Linux命令,应该叫Shell命令,只不过大多数人接触Shell命令是从接触Linux开始的,所以主观的将其称之为Linux命令。同样,如果我的理解有误,欢迎指正。
另外:想学习Linux命令的同学可以阅读我的笔记:《Linux命令记录》。
持续更新中……
以能够阅读别人的脚本源码,并独立编写自己的脚本文件为最终目标,本文章节将以编写脚本所需知识点来划分。详情请查看全文。
此部分介绍一些常用的Shell命令。
echo hello_world
:输出hello_world
。echo $PATH
:输出变量PATH
的值,$PATH在参数获取中会讲到。脚本文件执行时可以传入参数,比如常见的
cd /usr/local
,其中/usr/local
就是一个参数。相对应的,有传入参数,脚本源码就需要获取参数,脚本内部参数获取统一般是使用
$
符号,几种常见用法下面逐一说明。
echo $0
会打印-bash
,大概含义是:默认的Shell编译器
是bash
程序。1
可以换成任意正整数。$2
则是获取第二个参数,$n
就是获取第n个参数(n代表数字
)。for
循环遍历每个参数。$#
不同的是,返回值是全部参数作为一个整体的字符串。等同于${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 |
if 语句语法格式:
bashif condition
then
command1
command2
...
commandN
fi
写成一行(适用于终端命令提示符):
if [$(ps -ef | grep -c "ssh") -gt 1]; then echo "true"; fi
末尾的 fi
就是 if
倒过来拼写,后面还会遇到类似的。
if else 语法格式:
bashif condition
then
command1
command2
...
commandN
else
command
fi
if else-if else 语法格式:
bashif condition1
then
command1
elif condition2
then
command2
else
commandN
fi
if else
的 [...]
判断语句中大于使用 -gt
,小于使用 -lt
。
bashif [ "$a" -gt "$b" ]; then
...
fi
如果使用 ((...))
作为判断语句,大于和小于可以直接使用 >
和 <
。
bashif (( a > b )); then
...
fi
与其他编程语言类似,Shell支持for循环。
for循环一般格式为:
bashfor 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
循环使用命令行的位置参数。
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!