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)。

相关推荐
晨非辰26 分钟前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
xiaoxiaoxiaolll1 小时前
期刊速递 | 《Light Sci. Appl.》超宽带光热电机理研究,推动碳纳米管传感器在制药质控中的实际应用
人工智能·学习
励志码农2 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet
DisonTangor3 小时前
字节开源 OneReward: 通过多任务人类偏好学习实现统一掩模引导的图像生成
学习·ai作画·开源·aigc
黎宇幻生4 小时前
Java全栈学习笔记33
java·笔记·学习
2501_926227944 小时前
.Net程序员就业现状以及学习路线图(五)
学习·.net
siy23338 小时前
[c语言日记] 数组的一种死法和两种用法
c语言·开发语言·笔记·学习·链表
在路上`10 小时前
前端学习之后端java小白(三)-sql外键约束一对多
java·前端·学习
尚久龙10 小时前
安卓学习 之 用户登录界面的简单实现
android·运维·服务器·学习·手机·android studio·安卓
yb0os110 小时前
RPC实战和核心原理学习(一)----基础
java·开发语言·网络·数据结构·学习·计算机·rpc