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)。
相关推荐
虾球xz1 小时前
游戏引擎学习第55天
学习·游戏引擎
oneouto1 小时前
selenium学习笔记(二)
笔记·学习·selenium
sealaugh321 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
炭烤玛卡巴卡2 小时前
学习postman工具使用
学习·测试工具·postman
thesky1234562 小时前
活着就好20241224
学习·算法
蜗牛hb2 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
汤姆和杰瑞在瑞士吃糯米粑粑3 小时前
【C++学习篇】AVL树
开发语言·c++·学习
虾球xz3 小时前
游戏引擎学习第58天
学习·游戏引擎
奶香臭豆腐4 小时前
C++ —— 模板类具体化
开发语言·c++·学习
波音彬要多做4 小时前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法