目录
1.一个命令行中使用多个命令
可以将shell多个命令串起来,放在同一行中,彼此间用分号隔开。
注意:这种方法虽然能将任意多个命令串联在一起使用,但是不能超过最大命令行字符数255.
缺陷:每次运行,都需要输入整个命令。优化:将这些命令组合成一个简单的文本文件,运行时只需要运行该文本文件(即shell脚本文件)。
2.创建shell脚本文件
在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。其格式为:
#!/bin/bash
shell脚本中,#是行注释符号,shell不会处理注释掉的内容,但是第一行例外!#后面的惊叹号会告诉shell用哪个shell来运行脚本。这里使用的是bash shell。
在指定了shell脚本之后,每一行可输入命令,同一行多个命令之间也用分号分开,行与行之间的命令直接回车键(不能分号结尾)。shell会根据命令在文件中出现的顺序进行处理。
注意:脚本文件不需要严格后缀,只要是文件即可。
运行脚本:当前目录下面 ./script 使用单点 操作符运行。
3.echo命令
echo this is a test 输出: this is a test
注解:默认情况下,不需要使用引号将需要显示的文本划定出来。echo let's see if this'll work 输出:lets see if thisll work
注解:如果字符串中间出现引号,那么该引号会自动成对,并且里面的字符直接输出echo "let's see if this'll" work 输出: let's see if this'll work
注解:如果引号本身也是输出的一部分,则可用单引号或者双引号来划定文本字符串(需要输保留的引号部分)。echo "USER: $USER" 输出:USER: root
注解:如果$没有加转义符,默认是引用一个变量,如果变量并未定义则不显示。echo “the cost of the item is $15” 输出:the cost of the item is 5
注解:默认认为$1为变量,尝试显示但是未定义。如果要显示美元符号,则应该加上转义符反斜杠\$15说明: ${variable}形式引用变量,这对花括号通常用来帮助识别美元符号后的变量名。
4.用户变量
shell维护着一组环境变量,可用set命令来查看。除了环境变量,shell还允许在脚本中定义和使用自己的变量。用户变量的命名要求:可以由字母、数字和下划线组成,但是不能以数字开头。
(1)使用等号将值赋给用户变量,但是在变量、等号和值之间不能出现空格。否则会报错。即使值的名字和变量名一样,没有美元符号会被解释成普通文本。
test=10;b=test;c=$test;d=$b;echo $test,$b,$c,$d
其中变量b的值是普通文本test,变量c的值是变量test的值10,变量d的值是变量b的值test文本。(2)变量的值如果有空格,需要使用双引号或者单引号包括。否则会报错。
(3)变量的值中可以使用\转义符。
(4)变量的值中,双引号括起来的内容“$”、“\”和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符。
(5)变量值的叠加,可以使用两种方式:“$变量名”或${变量名}
第一个因为变量未定义($test456)所以值为空。第二个和第三个识别出来该变量的值。
(6)变量的路径,可以直接使用变量,也可以使用上面变量的叠加方式
(7)命令不是变量名。如果要使用命令产生的结果作为值赋予变量,可以使用``一对反引号或者$()包含命令。
date是shell命令,但不是变量,所以不能引用变量的方式,否则该变量未定义输出为空。如果需要该命令的结果作为值,则需要采用反引号或包含的方式。如果需要叠加也是可以的。
(8)变量查看和删除
查看使用set命令,删除使用unset 变量名
(9)特殊的字符赋值
制表符和换行符是特殊字符,格式:var=$'\t' 和 var=$'\n',必须使用$且单引号
一般字符直接赋值, 如var=; var=" "
5.输出重定向
(1)最基本的重定向是将命令的输出发送到一个文件中。
command > outputfile
重定向操作符>(大于号)创建了一个jupy文件(通过默认的umask设置),并将date命令的输出重定向到该文件中。如果输出文件已经存在了,重定向操作符会用新的文件数据覆盖已有的数据。
(2)不想覆盖原有文件内容,而是想将命令的输出追加到已有的文件中,可以使用双大于号(>>)来追加数据。如果输出文件不存在则会创建。
command >> outputfile
6.输入重定向
(1)输入重定向将文件的内容会重定向到命令,而非将命令的输出重定向到文件。
command < inputfile
记忆方法:命令行上,命令总在左侧,而重定向符号"指向"数据流动的方向。
wc命令可以对数据中的文本进行技术,默认情况下会输出3个值:行数、词数、字节数。
(2)内联输入重定向(<<),这种方法不需要使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以。格式如下:
command << marker
data
marker
除了<<符号,必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可以作为文本标记,但在数据的开始和结尾文本标记必须一致。
mark必须是一个整体,如果含有空格需要引号。会将marker之间的data输入重定向到wc命令中。
7.管道(piping)命令
管道被放在两个命令之间,将一个命令的输出重定向到另一个命令中。格式:
command1 | command2
如果使用重定向,则需要借助中间文件:command1 > temp-file;command2 < temp-file
注意:由管道串起来的两个命令并不是依次执行,实际上linux系统会同时运行这两个命令,在系统内部将它们连接起来。在第一个命令产生输出的同时,输出会立即送给第二个命令。数据传输不会使用任何的中间文件或缓冲区。
(1)可以在一条命令中使用任意多条管道。可以持续的将命令的输出通过管道传给其他命令来细化操作。command1 | command2 | command3 | command4 |...
这行命令会先执行rpm命令,将他的输出通过管道传给sort命令,然后将sort命令的输出传给more命令来显示。
也可以搭配使用重定向和管道来将输出保存到文件中。
8.数学运算($[operation])
在bash中,将一个数学运算结果赋值某个变量时,可以使用美元符和方括号( $[operation] )将数学表达式围起来。
使用方括号来计算公式的时候, 方括号里面对空格没有约束,不必担心shell会误解乘号或其它符号,因为它在方括号内,shell就知道它不是通配符。同时表达式里面的变量可以不需要美元符$。可以看出来里面的大于号不需要转义,不会被认为是重定向符号。
注意:在bash shell脚本中,数学运算符只支持整数运算。直接砍去小数点后面的数。