Shell编程一基础

Scroll Down

1. 脚本文件的书写格式

  • #!/bin/bash 解释器
  • <<COMMENT
    COMMENT 多行注释
  • #单行注释
  • 命令代码
    image.png

2. 脚本文件的各种执行方式

没有执行权限

bash/sh 文件名.sh

具有可执行权限

./文件名.sh

开启子进程执行

bash/sh 文件名.sh

不开启子进程执行

source 文件名.sh

3. 在脚本文件中实现数据的输入和输出

echo

  • echo -e + 字符串可以输出字符串里面的转义符号
  • \033 或\e 后面跟不同的代码可以设置不同的终端属性
    image.png
    image.png

printf

image.png

  • +右对齐 -左对齐

read

image.png

wc -l: 统计数据行数
ss -nutlp: 查看linux服务器所有服务监听端口列表

4.输入与输出的重定向

在Linux 系统中输出可以分为标准输出和标准错误输出。

  • 标准输出的文件描述符为1
  • 标准错误输出的文件描述符为2
  • 标准输入的文件描述符则为0
    使用>和>>把输出重定向到文件
  • 1>或1>>可以将标准输出信息重定向到文件(1 可以忽略不写,默认值就是1)
  • 2>或2>>将错误的输出信息重定向到文件
  • &> 可以同时将标准输出和错误输出都重定向到一个文件(覆盖)
  • &>> 可以同时将标准输出和错误输出都重定向到一个文件(追加)
  • 2>&1 将错误输出重定向到标准正确输出
  • 1>&2 将标准正确输出重定向到错误输出

>和>>区别:

  • 使用>符号将输出信息重定向到文件,如
    果文件不存在,则系统会自动创建该文件,如果文件已经存在,则系统会将该文件的所有内容覆盖
  • 使用>>符号将输出信息重定向到文件,如果文件不存在,则系统会自动创建该文件,如果文件已经存在,则系统会将输出的信息追加到该文件原有信息的末尾

/dev/null 是一个黑洞。无论往该文件中写入多少数据,都会被系统吞噬、丢弃。如果有些输出信息是我们不再需要的,则可以使用重定向将输出信息导入该设备文件中

可以使用<符号进行输入重定向。<符号后面需要跟一个文件名,这样可以让程序不再从键盘读取输入数据,而从文件中读取数据。

使用<<符号可以将数据内容重定向传递给前面的一个命令,作为命令的输入

5. 各种引号的正确使用姿势

单引号和双引号

  • 双引号的作用是引用一个整体,计算机会把引号中的所有内容当作一个
    整体看待。
  • 除了可以使用双引号引用一个整体,还可以使用单引号引用一个整体,同时单引号还有另外一个功能,即可以屏蔽特殊符号,\只能转义后面第一个符号
  • $$显示当前进程的进程号
  • &后台进程
    image.png

命令替换

``符号(反引号),反引号是一个命令替换符号,它可以使用命令的输出结果替代命令

反引号虽然很好用,但也有其自身的缺陷,比如容易跟单引号混淆,不支持嵌套(反引号中再使用反引号),$()组合符号,功能也是命令替换,而且支持嵌套功能

变量

用户自定义变量

Linux 系统中,自定义变量的定义格式为变量名=变量值,变量名仅是用来找到变量值的一个标识而已,它本身没有任何其他功能。在定义变量时,变量名仅可以使用字母(大小写都可以)、数字和下画线(_)组合,而且不可以使用数字开头
image.png
image.png

当需要读取变量值时,需要在变量名前添加一个美元符号“$”;而当变量名与
其他非变量名的字符混在一起时,需要使用{}分隔

tr -s "字符" 去除连续重复字符
cut -d "字符" -fn 获取以字符为分隔符第n列字符
unset 变量 删除变量
image.png

image.png

系统预设变量

image.png

数据过滤和正则表达式

grep 命令

grep [选项] 匹配模式 [文件]
image.png

正则表达式

image.png
image.png

扩展正则表达式

image.png

posix规范的正则表达式

image.png

GNU规范

  • \b(边界字符,匹配单词的开始或结尾)
  • \B(与\b 为反义词,\Bthe\B 不会匹配单词the,仅会匹配the 在中间的单词,如atheist)
  • \w 等同于[_[:alnum:]]
  • \W 等同于[^_[:alnum:]]
  • \d 任意数字
  • \D 任意非数字
  • \s 任意空白字符
  • \S 任意非空白字符
    image.png

算式运算符

Shell 支持多种算术运算,可以使用$((表达式))、$[表达式]、let 表达式进行整数的算术运算

image.png

使用let 命令计算时,默认不会输出运算的结果,一般需要将运算的结果赋值给变量,通过变量查看运算结果,使用let 命令对变量进行计算时,不需要在变量名前添加$符号。
image.png

bc计算器

image.png
通过bc计算器的另外两个内置变量ibase(in)和obase(out)可以进行进制转换,ibase 用来指定输入数字的进制,obase 用来设置输出数字的进制,默认输入和输出的数字都是十进制的
image.png