shell脚本的构建

在创建脚本文件时,必须在文件的第一行指定要使用的shell,格式为:

  1. #!/bin/bash

脚本文件的第一行中#后的惊叹号会告诉shell使用哪个shell来运行脚本,其他地方的#作为注释行使用。

为了运行shell脚本需要让编写的脚本被shell识别到,一般的做法有两种:

  1. 将shell脚本文件所处的目录添加到PATH环境变量中;
  2. 在提示符中用绝对路径或相对路径来引用shell脚本文件。

消息显示

echo命令后面加上一个字符串,就能显示出这个文本字符串。这种方式可以添加自己的文本消息来告诉脚本用户脚本正在做什么。

  1. [zhaoej2014@admin ~]$ echo This is a test
  2. This is a test

如果文本本身带有字符串,我们需要用单引号或双引号来划定文本字符串

如果想把文本字符串和命令输出显示在同一行中,可以用echo语句的-n参数。需要在字符串的两侧加上引号,并且保证字符串尾部有一个空格

  1. [zhaoej2014@admin zej]$ echo -n "The time and date are: "; date
  2. The time and date are: Mon Nov 2 10:38:28 CST 2020

变量

变量允许我们临时性地将信息存储在shell脚本中,以便和脚本中的其他命令一起使用。

环境变量

shell维护着一组环境变量,用来记录特定的系统信息。比如系统的名称、登录到系统上的用户名、用户的系统ID(也称为UID)、用户默认主目录以及shell查找程序的搜索路径。

在环境变量名称之前加上$可以使用这些环境变量。

用户变量

用户变量指的是用户自定义的变量,一般通过=建立,如:var1=5注意,在变量、等号和值之间不能出现空格!

命令替换

shell脚本最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。

有两种方法可以将命令输出赋给变量:

  • 反引号字符(`)
  • $()格式
  1. 要么用一对反引号把整个命令行命令围起来:
  2. testing=`date`
  3. 要么使用$()格式
  4. testing=$(date)

重定向

输出重定向

使用>符号将命令的输出结果定向。如果想要将命令的输出追加到已有文件中,需要用双大于号(>>)来追加数据。

输入重定向

输入重定向和输出重定向正好相反。输入重定向将文件的内容重定向到命令,而非将命令的输出重定向到文件。

使用>进行输入的重定向

管道

有时候需要将一个命令的输出作为另一个命令的输入。通过|符号分隔命令即可实现管道。

  1. ls | head -2 | sort -r

执行数学运算

expr命令

expr命令允许在命令行上处理数学表达式

  1. expr 1 + 5

使用方括号

bash shell提供了一种更简单的方法来执行数学表达式。在bash中,在将一个数学运算结果赋给某个变量时,可以用美元符和方括号($[operator])将数学表达式围起来。

  1. [zhaoej2014@admin zej]$ var1=$[1+5]
  2. [zhaoej2014@admin zej]$ echo $var1
  3. 6

注意:bash shell只支持整数运算。对于浮点数可以使用内置的计算器进行运算,命令为bc

退出脚本

Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码。按照惯例,一个成功结束的命令的退出状态码是0。如果有错误,则显示一个正数值。

默认,shell脚本会以脚本最后的一个命令的退出状态码退出。但是exit命令允许在脚本结束时指定一个状态退出码。