2022-12-13
温故知新
00

目录

前言
简介
常用基础命令
echo
参数获取
$0
$1
$#
$*
$PATH
算术运算符
关系运算符
逻辑控制
fi
if else
if else-if else
for 循环
脚本语法
实战案例

前言

在计算机行业,很多软件或工具提供命令操作方式,如DockerGitNode等等,并且Linux系统的操作也是使用命令交互的,这些命令基本上都是Shell命令。所以在系统、软件运维岗位的工作人员,会有很多使用Shell命令的场景,而且Shell脚本对于程序员来说也算是大佬必备技能。

详细学习Shell脚本的目的不是为了打几行命令,而是为了能够编写复杂的Shell脚本程序,将一些重复性的命令执行的过程和逻辑打包起来,形成一个可执行的程序,起到自动化的效果,减少我们重复性的工作,即:减少敲重复性的命令的工作。 并且,本文的最终目标就是 能够阅读别人的脚本源码,并独立编写自己的脚本文件。

声明:本文基于个人总结,如有错误欢迎指正!

提示:读本文可能会让很多人认为讲的就是Linux命令,其实也没错,因为咱们平时使用的Linux命令就是一些Shell脚本命令。我觉得不应该叫Linux命令,应该叫Shell命令,只不过大多数人接触Shell命令是从接触Linux开始的,所以主观的将其称之为Linux命令。同样,如果我的理解有误,欢迎指正。

另外:想学习Linux命令的同学可以阅读我的笔记:《Linux命令记录》。

持续更新中……

简介

能够阅读别人的脚本源码,并独立编写自己的脚本文件为最终目标,本文章节将以编写脚本所需知识点来划分。详情请查看全文。

常用基础命令

此部分介绍一些常用的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循环使用命令行的位置参数。

脚本语法

实战案例

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!