声明:以下内容均学习自《Linux就该这么学》一书
1、基本介绍
shell脚本第一行:#!/bin/bash,用来告诉系统使用哪一种shell解释器来执行该脚本。
执行shell脚本的方式有如下两种:
bash
# 第一种
bash test.sh
# 第二种
./test.sh
2、接收用户的参数
shell脚本已经内设了用于接收用户输入参数的变量,变量之间可以使用空格隔开。
如:./test.sh one two three four
- $0:对应的是当前shell脚本程序的名称,即test.sh
- $#:对应的是总共有几个参数,此条命令总共有4个参数
- $*:对应的是所有位置的参数值,分别是one two three four
- $?:对应的是显示上一次命令的执行返回值
- $1:对应的是第1个参数,即one
- $2:对应的是第2个参数,即two
3、条件表达式
shell脚本中的条件测试语句可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其它随机数值。
如:[ cd /home/ln ] ,注意条件表达式的两边都必须要有一个空格
文件测试语句
它是使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。
bash
# 判断/home/ln是否为一个目录类型的文件
[ -d /home/ln ]
echo $? # 如果返回值是0,则目录存在;如果返回值为非零值,则目录不存在
|----|---------------|
| -d | 测试文件是否为目录类型 |
| -e | 测试文件是否存在 |
| -f | 判断是否为一般文件 |
| -r | 测试当前用户是否有权限读取 |
| -w | 测试当前用户是否有权限写入 |
| -x | 测试当前用户是否有权限执行 |
[文件测试语句的相关参数]
逻辑测试语句
用于对测试结果进行逻辑分析,根据测试结果实现不同的效果。
逻辑"与":&&。表示当前面的命令执行成功后才会执行它后面的命令。
bash
# 先判断/home/ln是否存在,若存在则输出Exist
[ -e /home/ln ] && echo "Exist"
**逻辑"或":|| 。**表示当前面的命令执行失败后才会执行它后面的命令。
bash
# 先判断当前登录的用户是否是root管理员身份,若是,则不执行后面的命令;若不是,则执行后面的命令。
[ $USER = root ] || echo "user"
**逻辑"非":! 。**表示把条件测试中的结果取相反值。
bash
# 先判断当前登录用户是否是root用户,如果是,取反后,变为不是,则执行后面的语句
[ !$USER = root ] || echo "administrator"
由于当前登录的账号是root账号,那么第一个条件取反后为假,则不会执行 echo "user"语句,就会执行echo "root"语句。
bash
# 当前登录的账号为root账号
[ !$USER = root ] && echo "user" || echo "root" #输出root
整数值比较语句
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作。
如:[ 10 -gt 10 ]
|---------|----------------------|
| -eq | equal,是否等于 |
| -ne | not equal,是否不等于 |
| -gt | greater than,是否大于 |
| -lt | less than,是否小于 |
| -le | less equal,是否等于小于 |
| -ge | greater equal,是否大于等于 |
[整数比较运算符]
字符串比较语句
用于判断测试字符串是否为空值,或两个字符串是否相同。经常用来判断某个变量是否未被定义(即内容为空值)。
bash
# 当前语系的环境变量值LANG不是英语(en.US).
[ $LANG != "en.US" ] && echo "Not en.US" # 执行结果:Not en.US
|--------|-------------|
| = | 比较字符串内容是否相同 |
| != | 比较字符串内容是否不同 |
| -z | 判断字符串内容是否为空 |
[字符串比较运算符]