shell脚本教程学习

Bash 是 Linux 和 Mac 的默认 Shell(命令行环境),系统管理和服务器开发都需要用。

echo命令

echo作用是在屏幕上输入一行文本,可以将该命令的参数输出。一般样式

bash 复制代码
$ echo "<HTML>
    <HEAD>
          <TITLE>Page Title</TITLE>
    </HEAD>
    <BODY>
          Page body.
    </BODY>
</HTML>"

-n 参数

默认情况,echo输出的文本末尾会有一个回车符,-n可以取消末尾的回车符。

bash 复制代码
$ echo a;echo b
a
b

$ echo -n a;echo b
ab

-e 参数

解释引号中的特殊字符,默认情况下,引号会让特殊字符变成普通字符。

命令格式

命令行环境中,主要通过使用Shell命令进行各种操作。Shell命令基本都是这种格式。

bash 复制代码
$ command [ arg1 ... [ argN ]]

空格

bash使用空格(或者tab键)区分不同的参数。

bash 复制代码
$ echo this is a     test
this is a test

bash对于多余的空格,会忽略掉多余的空格。

分号

分号(;)是命令的结束符,使得一行可以放置多个命令,上一个命令执行结束后,再执行第二个命令。

复制代码
$ clear; ls

上面例子中,Bash 先执行clear命令,执行完成后,再执行ls命令。

注意,使用分号时,第二个命令总是接着第一个命令执行,不管第一个命令执行成功或失败。

命令的组合符

除了分号,Bash 还提供两个命令组合符&&和||,允许更好地控制多个命令之间的继发关系。

&&表示若是前命令运行成功,则运行后命令。

||表示若是前命令运行失败,则运行后命令。

type命令

Bash 本身内置了很多命令,同时也可以执行外部程序。怎么知道一个命令是内置命令,还是外部程序呢?

type命令用来判断命令的来源。

复制代码
$ type echo
echo is a shell builtin
$ type ls
ls is hashed (/bin/ls)

上面代码中,type命令告诉我们,echo是内部命令,ls是外部程序(/bin/ls)。

type命令的-t参数,可以返回一个命令的类型:别名(alias),关键词(keyword),函数(function),内置命令(builtin)和文件(file)。

字符扩展

~自动扩展为当前用户的主目录。

?代表文件路径里面的任意单个字符,不包括空字符。

*表示文件路径里面的任意数量的任意字符,包括零字符。但不会匹配隐藏文件。

方括号扩展

...\] 表示文件确实存在的前提下才会扩展括号之中的任意一个字符。属于**文件名匹配**,扩展的结果必须符合现有的文件路径。 若是其中需要匹配\[和连字号-,只能放在方括号内部的开头或结尾。 \[start-end\]扩展表示匹配一个连续范围。 * `[a-z]`:所有小写字母。 * `[a-zA-Z]`:所有小写字母与大写字母。 * `[a-zA-Z0-9]`:所有小写字母、大写字母与数字。 * `[abc]*`:所有以`a`、`b`、`c`字符之一开头的文件名。 * `program.[co]`:文件`program.c`与文件`program.o`。 * `BACKUP.[0-9][0-9][0-9]`:所有以`BACKUP.`开头,后面是三个数字的文件名。 #### 大括号扩展 表示分别扩展为大括号里面的所有值,各个值之间使用逗号分隔。**不是文件名扩展,只会扩展成所有给定的值。**内部的逗号前后不能有空格,否则大括号扩展会失效。 `{start..end}`,表示扩展成一个连续序列。比如,`{a..z}`可以扩展成26个小写英文字母。 如果整数前面有前导`0`,扩展输出的每一项都有前导`0`。 $ echo {01..5} 01 02 03 04 05 $ echo {001..5} 001 002 003 004 005 这种简写形式还可以使用第二个双点号(`start..end..step`),用来指定扩展的步长。 $ echo {0..8..2} 0 2 4 6 8 上面代码将`0`扩展到`8`,每次递增的长度为`2`,所以一共输出5个数字。 多个简写形式连用,会有循环处理的效果。 $ echo {a..c}{1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3 #### 变量扩展 Bash将美元符号$开头的词元视为变量,将其扩展为变量值。 ### 字符类 `[[:class:]]`表示一个字符类,扩展成某一类特定字符之中的一个。常用的字符类如下。 * `[[:alnum:]]`:匹配任意英文字母与数字 * `[[:alpha:]]`:匹配任意英文字母 * `[[:blank:]]`:空格和 Tab 键。 * `[[:cntrl:]]`:ASCII 码 0-31 的不可打印字符。 * `[[:digit:]]`:匹配任意数字 0-9。 * `[[:graph:]]`:A-Z、a-z、0-9 和标点符号。 * `[[:lower:]]`:匹配任意小写字母 a-z。 * `[[:print:]]`:ASCII 码 32-127 的可打印字符。 * `[[:punct:]]`:标点符号(除了 A-Z、a-z、0-9 的可打印字符)。 * `[[:space:]]`:空格、Tab、LF(10)、VT(11)、FF(12)、CR(13)。 * `[[:upper:]]`:匹配任意大写字母 A-Z。 * `[[:xdigit:]]`:16进制字符(A-F、a-f、0-9)。

相关推荐
西岸行者13 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意13 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码13 天前
嵌入式学习路线
学习
毛小茛13 天前
计算机系统概论——校验码
学习
babe小鑫13 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms13 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下13 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。13 天前
2026.2.25监控学习
学习
im_AMBER13 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J13 天前
从“Hello World“ 开始 C++
c语言·c++·学习