目录
初识 Shell 编程:Linux 环境下的“轻量级”开发体验
初识 Shell 编程:Linux 环境下的“轻量级”开发体验
在编程世界里,不同语言往往与特定操作系统有着更紧密的适配性,Python 与 Windows、Shell 与 Linux 便是其中一组典型搭配。不过相较于 Python 常需依托集成开发环境(IDE)开展开发,Shell 编程的“轻量”与“原生”特性,恰好契合了 Linux 系统的设计逻辑,也让它成为玩转 Linux 不可或缺的工具。
首先需要明确一个核心区别:Shell 并非传统意义上的“程序设计语言”,而是更偏向“命令解释语言”。它的核心作用是“翻译”用户输入的命令,将其传递给 Linux 内核执行——比如我们熟悉的 `ls`(查看目录)、`cd`(切换目录)、`mkdir`(创建文件夹)等基础命令,本质上都是 Shell 可识别的“最小执行单元”。而当我们将一系列命令按逻辑组合,用条件判断(`if-else`)、循环(`for`/`while`)等语法串联成脚本文件(后缀通常为 `.sh`)时,便形成了“Shell 编程”。
简单来说,Shell 是 Linux 系统的“原生交互助手”:它以命令为核心,依托系统自带的shell解释器和文本编辑器就能开发,既体现了自身“命令解释语言”的特性,也完美契合了 Linux“一切皆文件”的底层逻辑,是入门 Linux 系统开发与运维的必备技能。

Linux 系统默认会自带 Shell 解释器,以上是常见的 Shell 版本及其对应的可执行文件路径。
第一个shell脚本
在 Linux 系统中,只要打开终端(Terminal),就能直接开启开发,我们这里使用xshell:
1. 用简单的文本编辑器(如 `vim`)编写脚本,比如输入 `vim test.sh` 即可创建并编辑第一个 Shell 脚本;(编辑器中,按i 进入插入模式开始编辑,完成后esc退出插入模式,按 :wq保存并退出)

这里echo相当于python中的print,会输出后面的内容。
#!/bin/bash 是声明使用哪个版本的shell解释器版本
这里第一个方法直接指定shell解释器来执行文件,就可以不加第一行的#!/bin/bash ,第二种方法会使用默认的shell,这里我们声明了就会使用/bin/bash。
2、执行脚本,有三种方法:

比如我们用第一种方法,先要给文件加可执行的权限,然后用./test.sh执行:

基础语法
任何一门语言都离不开基础语法的学习,了解了什么是shell编程之后,接下来我给大家介绍shell编程的基础语法。
变量:
在shell语言中,只用两种变量类型,字符串和数值。shell语言中定义变量不需要声明变量类型,直接赋值即可(脚本语言往往如此)。变量的命名规则与大多数编程语言一样(老生常谈)。
需要注意的是,在shell语言中“=”的周围不能有空格。
1、定义变量有三种方式:

三种方式的区别:
例子:不加引号的方式,不保留空格,也会是说赋值到空格,变量就定义结束了,后面的语句就会报错:

这里的$符号表示返回变量的值,若是直接echo a,就会直接打印字母a。
执行结果:
2、使用变量:

3、将命令的结果赋值给变量:

4、设置只读变量:
使用readonly命令可以将变量定义或者设置成只读变量,变量的值之后不能改变。
5、删除变量:
使用变量unset。注意unset不能删除只读变量。
6、向脚本传递参数:
直接在文件名后面输入参数即可实现传递,值得注意的是,参数0代表文件名。
7、Shell 特殊参数列表/Shell 内置预定义变量:

例子:

cat是查看文件的命令。
执行结果:

注;

字符串:
1、三种定义:

这里就是前面提到变量的三种定义方式,前面说的变量就是指字符串。毕竟Linux的变量只有字符串和数值。
2、获取字符串的长度

3、字符串的拼接
4、字符串的截取
字符串截取有两种方式
从指定位置开始截取:

从指定字符(字符串)开始截取:
1、向右截取

这里我们匹配到第一个指定的字符就会开始截取。如果我们需要匹配到指定字符的最后一个时再开始截取,可以使用两次#:
2、向左截取
这里我们使用两次%,是指第一次匹配到指定字符,与向右截取反过来了。
数组:
1、定义与创建
2、读取

3、关联数组

关联数组其实就是python中的字典。
4、访问关联数组
5、获取数组中的所有元素
6、获取数组的长度:使用#
作业:编写一个九九乘法表
大家可以自己尝试编写一个乘法表,这里附上我的方法:
补充一个冷知识,shell编程中对缩进是没有要求的,大家自己能看懂代码就行。
for i in {1..9};do #外层循环1到9
for j in $(seq $i 9);do #内层循环,从行数到9
echo -n $i × $j=$((i*j)) # 输出i×j,-n 参数表示不换行,因为我想在一行输出一个内层的全部循环
echo -n " " # 上面代码虽然不换行了,但是输出结果连载一起,这里输出一个空格用以区分
done
echo # #结束一次内层循环,输出一个换行,开始下一层的循环
done
运行结果:


901

被折叠的 条评论
为什么被折叠?



