推荐书籍:刘遄老师的《Linux就该这么学》
一、Shell基础
Shell终端解释器可以当作人与计算机硬件之间的“翻译官”,它作为用户与Linux系统内部的通信媒介,除了能够支持各种变量和参数外,还提供了诸如循环、分支等高级编程语言所有的控制结构特性。
Shell脚本命令的工作方式有两种:交互式和批处理。
- 交互式:用户每输入一条命令就立即执行。
- 批处理:由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中的诸多命令。
在Shell脚本中,可以使用很多Linux命令以及正则表达式、管道符、数据流重定向等语法规则。将内部功能模块化后通过逻辑语句进行处理,最终形成日常所用的Shell脚本。
查看命令终端解释器
echo $SHELL
Shell脚本文件规范
一个简单的脚本文件example.sh:用于查看当前工作路径并列出当前目录下所有文件及属性信息。
#!/bin/bash
# For Example BY linux
pwd
ls -al
- Shell脚本文件的名称可以任意,但便于识别通常使用.sh作为后缀。
- 第一行的脚本声明(#!)用于告知系统使用哪种Shell解释器。
- 第二行通常添加该脚本必要的注释信息(注释信息以#开头)。
- 其后的可执行语句就是平时所使用Linux命令。
文件测试语句
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型。返回值为0,表示目录。 |
-e | 测试文件是否存在。返回值为0,表示文件存在。 |
-f | 判断文件是否为一般文件。返回值为0,表示为一般文件。 |
-r | 测试当前用户是否有权限读取。返回值为0,表示有读取权限。 |
-w | 测试当前用户是否有权限写入。返回值为0,表示有写入权限。 |
-x | 测试当前用户是否有权限执行。返回值为0,表示有执行权限。 |
注:执行结果可以由”echo $?“查看。
逻辑测试语句
运算符 | 作用 |
---|---|
&& | 与运算,表示前面的命令执行成功后才会执行它后面的命令。 |
|| | 或运算,表示前面的命令执行失败后才会执行它后面的命令。 |
! | 非运算,表示将条件测试中的判断结果取相反值。 |
整数值比较语句
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
字符串比较语句
运算符 | 作用 |
---|---|
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
二、用户参数
为了让Shell脚本程序更好地满足用户的一些实时需求,Shell脚本语言内设了用于接收参数的变量,变量之间使用空格间隔。执行脚本时可以如下传入参数。
./Example.sh one two three four five six
参数 | 作用 |
---|---|
$# | 用于获取传入参数的总个数 |
$0 | 用于获取当前Shell脚本程序的名称 |
$* | 用于获取所有位置的参数值(*表示1,2,3,…) |
$? | 用于获取上一次命令的执行返回值 |
三、流程控制
1、if条件测试语句
if 条件测试操作1 then
命令序列1
elif 条件测试操作2 then
命令序列2
else
命令序列3
fi
2、for条件循环语句
for 变量名 in 取值列表
do
命令序列
done
3、while条件循环语句
while 条件测试操作
do
命令序列
done
4、case条件测试语句
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式n)
命令序列n
;;
*)
默认命令序列
esac