《Linux命令行与Shell脚本编程大全》Note-Ch11
11.1 使用多个命令
如果要两个命令一起运行,可以把他们放到同一行中,彼此之间用分号隔开。
1 | $ date "+%Y-%m-%d %h:%m:%s" ; who |
11.2 创建Shell脚本文件
在创建shell脚本文件时,必须在第一行指定要使用的shell(作为解释器),其格式为
1 |
在通常的Shell脚本中,井号(#)用作注释行,shell并不会处理shell脚本中的注释行。然而shell脚本中的第一行是个例外。!会告诉shell用哪个解释器来运行脚本。
运行shell脚本有两种方式
- 作为解释器参数
1 | $ bash test.sh |
这种方式运行脚本,不需要在第一行制定解释器信息,写了也没用。
- 作为可执行程序
1 | $ chmod +x test.sh |
注意,一定要写成./test.sh而不是test.sh,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉shell说,就在当前目录找。
11.3 显示消息
echo
在终端输出给定的参数
- -n 打印一条信息并且不换行
- -e 启用反斜杠转义的解释(特殊字符) e.g: 颜色 换行
echo命令可用单引号或双引号来划定文本字符串(默认情况下不需要引号)
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号
1 | your_name='qinjx' |
- 双引号里可以有变量
- 双引号里可以出现转义字符
使用变量
环境变量 用户变量
通过$或者${}的形式引用变量,变量名两侧额外的花括号通常用来帮助识别美元符后的变量名。
除了环境变量,shell脚本还允许在脚本中定义和使用你自己的变量。定义变量允许临时存储数据并在整个脚本中使用。用户变量可以是任何由字母、数字和下划线组成的文本字符串,长度不超过20个,并且区分大小写,使用等号将值赋给用户变量,在变量、等号和值之间不能出现空格。
shell脚本会自动决定变量值的数据类型(虽然一共只有整数和字符串两种)。在脚本的整个生命周期里,shell脚本中定义的变量会一直保持着他们的值但在shell脚本结束时会被删除掉。
命令替换
shell脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。把输出赋给变量之后,就可以随意在脚本中使用了。
有两种方法可以将命令输出赋给变量:
- 反引号字符(`)
- $()格式
1 | Date=`date +%y-%m-%d %H:%M:%S` |
shell会运行命令替换符号中的命令,并将其输出赋值给变量Date
重定向输入和输出
bash shell提供了几个操作符,可以将命令的输出重定向到另一个位置(比如文件)。重定向可以用于输入,也可以用于输出,可以将文件重定向到命令输入。
输出重定向
>
将命令的输出发送到一个文件中,如果文件不存在则创建,如果文件存在则将原文件中数据覆盖
1 | date > test.txt |
>>
将命令的输出追加到已有文件中
输入重定向
<
输入重定向将文件的内容重定向到命令
<<
内联输入重定向符号
你必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必须一致。
1 | command << marker |
管道
执行数学运算
退出脚本