目录
一.使用多个命令
shell脚本的关键在于输入多个命令并处理每个命令的结果,甚至需要将一个命令的结果
传给另一个命令。shell可以让你将多个命令串起来,一次执行完成。如果要两个命令一
起运行,可以把它们放在同一行中,彼此间用分号(;)隔开。
以date ; who 为例子:
如果用管道符实现,则只输出最终的结果,并不显示中间结果。
date | who
二.创建、执行shell 脚本文件
(一)创建shell脚本文件
要将shell命令放到文本文件中,首先需要用文本编辑器vim来创建一个.sh后缀的shell脚
本文件,然后将命令输入到文件中。并且,在创建shell脚本文件时,必须在文件的第一
行指定要使用的shell。其格式为:
#!/bin/bash
一般来说#用作注释行,而#!用来告诉系统用哪个shell程序来运行脚本。
比如我们创建一个test.sh的脚本:
(二)执行脚本文件
两个方法:
(1):是调用bash命令执行。语法:bash 脚本文件
+
(2):是用绝对或相对文件路径来直接执行shell脚本文件:/home/lee/test.sh或
者./test.sh。但这种方法一定要注意,需要给这个脚本赋予可执行(x)的权限。否则会
遇到Permission denied。
(三)echo 显示命令消息
大多数shell命令都会产生自己的输出显示在控制台显示器上。
通过echo命令可以添加自己的文本消息来告诉用户,shell脚本正在做什么。
echo -n 可以把文本字符串和命令输出显示在同一行中。
三.在脚本中使用变量
变量允许你临时性地将信息存储在shell脚本中,以便和脚本中的其他命令一起使用。
在脚本中,可以在环境变量名称之前加上美元符($)来使用这些环境变量。
只要脚本在引号中出现美元符($) ,它就会以为你在引用一个变量。而当你在美元符($)前放置一个反斜线(\)时,则会输出美元符($)加变量名称,而不是变量对应的值。
除了直接调用系统自带的环境变量外,shell脚本还允许自己去定义并直接使用变量。
用户定义的变量可以是任何由字母、数字或下划线组成的文本字符串,长度不超过20个,
区分大小写。定义的变量允许临时存储数据并在整个脚本中使用(局部变量)。
使用等号将值赋给用户变量。在变量、等号和值之间不能出现空格。
当你一旦退出这个脚本后,在shell命令行是无法直接调用脚本中所定义的变量!
shell脚本中最有用的特性之一就是可以从一个命令的输出中提取信息,并将其赋给变量。把输出赋给变量之后,就可以随意在脚本中使用了。
有两种方法可以将命令的输出赋给变量:
① 反引号字符(`),` COMMAND `。(在你键盘上波浪号那里)
② $() 格式,$(COMMAND)。
在脚本中通过命令替换获得当前日期并用它来生成唯一文件名。
+%y%m%d格式告诉date命令将日期显示为两位数的年月日的组合。
查看文件内容的行数(wc)
如果我们想查看该脚本(以及所有文件)中有多少行的内容,可以使用
wc命令可以对对数据中的文本进行计数。默认情况下,它会输出3个值:
•文本的行数
•文本的词数
•文本的字节数
-l参数则表示只看有多少行。我们也可以一次性查看所有文件的行数,用通配符(*)。
四.执行数学运算
① 使用expr 命令。 注意符号与数字之间要有 空格 。expr 部分字符需要转义字符反斜杠(\)
② 使用美元符($)+ 方括号 [] 或者 $+双小括号 (())
expr命令的操作符有哪些:
bash shell数学运算符只支持整数运算。
内建的bash计算器bc允许在命令行中输入浮点表达式,然后解释并计算该表达式,最后返
回结果。在命令行输入bc,即可进入到bc计算机的应用程序当中。退出bc计算器:quit
默认还是只给出整数结果,但我们可以scale=3
设置保留小数点后3位
那我们如何在shell脚本中使用bc呢?
可以用管道符(|)运行bc命令,并将输出赋给一个变量。
基本格式如下:
variable=$(echo "options; expression" | bc)
options允许你设置变量值的格式。如果不止一个变量用分号(;)分开。 expression定义了通过bc执行的数学表达式。
当我们调换了分号(;)前后语句的位
置后,发现系统先执行数学运算,再
执行小数点设置命令
五.退出脚本
shell中运行的每个命令都使用退出状态码(exit status)告诉shell它已经运行完毕。退出
状态码是一个0~255的整数值,在命令结束运行时由命令传给shell。可以捕获这个值并在脚本中使用。
Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码。
默认情况下,shell脚本会以脚本中的最后一个命令的退出状态码(0)退出。
exit命令允许你在脚本结束时指定一个退出状态码。