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]*:所有以abc字符之一开头的文件名。
  • 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)。
相关推荐
Mephisto.java37 分钟前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
武子康2 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
使者大牙2 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
As977_3 小时前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi3 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
Rattenking3 小时前
React 源码学习01 ---- React.Children.map 的实现与应用
javascript·学习·react.js
dsywws3 小时前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
道法自然04023 小时前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
爱吃生蚝的于勒3 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法