1. 使用多个命令
shell 脚本允许将多个命令串起来放进脚本中。创建脚本的最基本的方式是将命令行中的多个命令通过分号分开来,shell就按照顺序逐个执行命令,在显示器上显示每个命令的输出。
但是上述方法对于小型脚本尚可,但是它有一个很大的缺陷:每次运行前,都必须在命令提示符输入整个命令。可以将这些命令组合成一个简单的文本文件,这样就不需要再命令行中手动的输入了。在需要运行这些命令的时候,只用运行这个文件文件就可以了。
1.2 创建shell脚本
可以创建一个shell脚本,将多个命令放进同一个文件,让shell依次执行。shell脚本必须定义用于运行脚本的shell。这个可以通过#!符号在脚本文件的第一行输出,后面指定shell的完整路径。
- 要将shell命令放到文本文件中,首先需要通过用【文本编辑器】来创建一个文件,然后将命令输入到文件中。
- 在创建shell脚本文件时,必须在文件的第一行指定要使用的shell,其格式为:
【#!/bin/bash】。在通常的shell脚本中,(#)用作注释行,shell并不会处理shell脚本中的注释行,然而,shell脚本的第一行是个例外,#后面的惊叹号会告诉shell用哪个shell来运行脚本。 - 在指定了shell之后,就可以在文件的每一行中输入命令,然后加一个回车符。
#! /bin/bash
# This script displays the date and who's logged on
date
who
上述就是脚本的所有内容。可以根据需要,使用分号将两个命令放在一行,但在shell脚本中,可以在独立的行中书写命令。shell会按照命令在文件出现的顺序进行处理。
第一行的内容指定了shell脚本解释器的路径,若是不写第一行时,系统存在默认的解释器路径。
1.3 bash shell如何找到脚本文件
shell会通过PATH环境变量来查找命令。
$ echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:user/local/bin:/usr/bin
2. shell变量
shell脚本内,可以通过变量前使用美元符来引用环境变量。也可以定义自己的变量以便在脚本中使用,并对其赋值,甚至可以通过反引号或$()捕获某个命令的输出。在脚本中可以通过变量名前放置一个美元来使用变量的值。
例如:
[root@VM_130_4_centos ~] echo ps -ef|grep java|awk '{print $2}'
[root@VM_130_4_centos ~] echo `ps -ef|grep java|awk '{print $2}'`
626 1060 2789 4049 4691 5259 5669 8732 9539 9658 11798 14599 15556
使用反引号的部分会当做一个命令去运行。
3. shell的重定向
shell允许更改命令标准输入输出。将其重定向到其他地方。可以通过大于号将命令输出从显示器屏幕重定向到一个文件中。也可以通过双大于号将输出数据追加到已有文件。小于号用来将输入重定向到命令。可以将文件重定向到某个命令。
4. shell管道符
shell管道符命令允许将命令的输出直接重定向到另一个命令的输入。Linux系统可以同时运行这两条命令,将第一个命令的输出发送给第二个命令的输入,不需要借助任何重定向文件。
5. shell运算
shell提供了多种方式在shell脚本中执行数学操作。
- expr命令是一种进行整数运算的简便方法。
- 美元符号放在方括号包围的表达式之前来执行基本的数学运算。
- 需要利用bc计算器命令,将内联数据重定向到输入,然后将输出存储到用户变量中。
6. shell退出状态码
shell中运行的每一个命令都会产生一个退出状态码。退出码是一个0-255的整数值,表明命令是否成功执行;如果没有成功,可能的原因是什么。退出状态码0表明命令成功执行了。也可以在shell脚本中用exit命令来声明一个脚本完成时的退出状态码。