从零开始学Shell之基础篇

一、Shell

GNU/Linux shell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文
件以及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责
交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执行。

二、命令

2.1 执行单个命令

想要执行一个命令,只要在shell的命令行提示符后面输入命令即可。比如在shell中输入pwd,会显示当前用户所在的目录。

2.2 执行多个命令

shell可以让你将多个命令串起来,一次执行完成。如果要两个命令一起运行,可以
把它们放在同一行中,彼此间用分号隔开。

$ date; who

三、Shell脚本

将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本

3.1 创建Shell脚本

要点:

  1. 第一行要指明使用的shell,其格式为:#!/bin/bash
  2. 后面的内容是注释,不会被执行。
  3. 每一行写一条命令 写在同行需要分号分隔
  4. 执行时候,要么使用绝对路径,要么在环境变量中添加shell的目录。
  5. 一般来说刚创建都shell没有执行的权限,添加命令 chmod u+x shellfile

3.2 变量

变量是数理逻辑的必要组成部分。在shell脚本中我们会时常使用变量。

3.2.1 环境变量

shell维护着一组环境变量,用来记录特定的系统信息。可以使用set命令查看完整的当前环境变量列表。我们可以使用$变量名引用变量。

3.2.2 用户变量

我们可以在hell脚本中定义和使用自己的变量。用户变量可以由字母,数字或下划线组成的字符串,长度不超过20个。区分大小写。

var1=10
Var3=53
var4="hello shell"
var5=$var4

ps:在赋值语句中使用变量仍然要在前面加$符号

3.3 命令替换

shell脚本中常用特性就是从命令中提取信息,并赋值给变量。有两种办法可以将命令输出赋值给变量。

  1. 反引号字符``
  2. $()格式 例子一
test=`date`

例子二

test=$(date)

3.4 重定向输入和输出

3.4.1 输出重定向

最基本的输出重定向将命令的输出发送到一个文件。 bash shell使用 > 完成这样功能。

command > outputfile

之前输出到屏幕的结果就会保存到文件中。
Ps:输出重定向会覆盖之前的文件内容。如果不想这样,可以使用>>符号来追加数据。

3.4.2 输入重定向

输入重定向就是将文件的内容重定向到命令了。输入重定向使用符号<

command < inputfile

我们经常在用wc命令时,使用输入重定向。

$ wc < test6

wc命令可以对数据中的文本进行计数。默认情况下,会输出三个值:

  1. 文本的行数
  2. 文本的词书
  3. 文本的字节数

3.4.3 管道

管道串起来的命令会同时执行。在第一个命令产生输出的同时,输出会被立即送给第二个命令。数据
传输不会用到任何中间文件或缓冲区。

command1 | command2

3.5 数学运算

3.5.1. expr 表达式

eg: expr 2 + 5
ps: 许多expr命令操作符在shell中另有含义,所以要使用转义字符。例如 \*

3.5.2. [] 表达式

在bash中将一个数学运算的结果赋给某个变量时,可以用$[]将数学表达式围起来。
eg:var1=$[2 + 3]

3.5.3. 使用bc命令进行数学运算

bc命令是bash提供的功能最为强大,支持浮点数运算的计算器
var1 = (echo "2.3 * 4.3" | bc)

3.6 脚本退出

shell中运行的每一个命令都有一个退出状态码。退出状态码是一个0~255的整数值,在命令运行结束的时候传给shell。可以捕获这个值并在脚本中使用。

3.6.1 查看退出状态码

Linux提供了一个专门的变量$?来保存上一个执行命令退出的状态码。

3.6.2 设置退出状态码

我们可以使用exit 命令指定退出状态码。
例子:
echo "test"; exit 5
echo  $?

总结

学习了基础了shell命令,下一章学习结构的shell的知识了。最近发现自己的shell技能还是很弱,所以趁着假期重新开始复习下shell知识,把这篇文章中缺少的部分也进行适当的补充。