1.创建shell脚本文件
shell脚本文件第一行必须指定要使用shell。格式为:#!/bin/bash。
例如:
在写好shell脚本之后,需要运行shell脚本。运行shell脚本时,有两种方法,第一,可以将shell脚本所在的目录添加到环境变量PATH中;第二,在命令行中使用文件的路径来引用shell脚本。
在采用第二种方式时,需要判断是否有执行该shell文件的权限。
在我的环境下,是有x权限的。如果没有的话,可以使用chmod命令来修改文件的权限。
最后采用相对路径的方法来执行脚本文件。
2.显示消息
echo 可以用来显示字符串。在显示字符串时,可以不使用引号。而如果字符串中不含有 ‘ 或者 “ ,要显示的字符串可以不使用引号,否则要使用与字符串中的引号不相同的引号。
在命令中:
利用shell脚本:
其输出结果为:
3.使用变量
可以在shell脚本中直接使用环境变量,需要和$一起使用。例如:echo $PATH
也可以在shell脚本中定义自己的变量。shell脚本会自动决定变量的数值类型。同样,在使用变量时,需要和$一起使用。
4.反引号
反引号是不同于 ’ ,反引号和~位于用以键位。其作用是将shell命令的输出赋给变量。
其输出结果为
5.输入重定向
输入重定向是将命令的输出发到一个文件当中。shell中采用 > 来完成输入重定向。
例如:date > file 表示将date的结果输入到文件file中。如果file已经存在,则新文件覆盖旧文件。
如果想在原有的文件中追加结果,则使用 >> .
6.输出重定向
输出重定向是将文件的内容重定向到命令当中。shell中使用 < 来表示输出重定向。
wc命令计算了 file 文件的行数,词数和字节数。
另外,还可以将命令行中的内容重定向到命令当中,即内联输入重定向。用 << 来表示。
上图中,<< 右边的 eof 标记了文本的开始和结尾。该标记可以是任意字符串,再比如 wc << end ..... end ,则输出两个end之间的wc的值。
7.管道
管道也是某个命令的结果作为另一个命令的输出,和重定向有些类似。管道用 | 来表示。
在使用管道时,命令是同时运行的,即前一条命令产生结果的同时会立即传送给第二条命令。例如 ls -l | sort,即将 ls -l 第一条结果输出给sort,再将第二条结果输出给sort......,在整个过程中,是不会使用到任何中间文件或者缓冲区的。
管道常见的使用场景是 ls -l | more 。当一个目录中的文件比较多时,使用more命令可以强制一条一条的输出每条数据。
8.数学运算
在shell脚本中使用数学运算可以使用方括号。
其运行结果为
由上图可见,第一个输出只是对变量进行了简单的替换,而第二个输出则进行了运算。
shell中不支持浮点数运算。对于小数除法,只进行了整数计算,比如10/3的结果是3.可以利用shell中的bc计算器来进行浮点数计算。
在命令行中输入bc后会进入bc计算器模式,然后就可以进行计算。scale是一个内建的可以控制浮点运算的变量。利用这个变量可以控制小数点的位数。如上图所示。
上图显示了在脚本中使用bc计算器。其中变量var3就采用了bc计算器进行了浮点运算。
9.退出脚本
shell中的每个命令都有退出状态码,可以使用$?来产看一条命令执行完成后的退出状态码,并且仅能查看上个命令的退出状态码。
输出结果为0说明命令执行正确。
其他的linux的退出状态码比如1(发成未知错误),2(误用shell命令),126(命令不可执行)等等。
另外,可以返回自己的退出状态码。即可以在脚本结束时指定一个退出状态码。
在上述脚本的结束时指定了退出状态码400,执行脚本后输出状态码时其结果为144.因为状态码的最大值为255,所以最终输出的值会是设定值除256的余数。在本例中为400除256的余数,所以为144.