测试命令
格式1:test 条件表达式
格式2:[条件表达式]
test命令和 [ ] 相同,建议使用[ ]
#方框中要空格
#用test可能会不小心定义变量
文件测试
常见的测试操作符 | 含义 |
---|---|
-d | 检查文件是否存在且为目录 |
-f | 检查文件是否存在且为常规文件 |
-L | 测试是否为软连接文件 |
-r | 测试当前用户是否有读取权限 |
-w | 测试当前用户是否有写入权限 |
-x | 测试当前用户是否有执行权限 |
-e | 测试文件是否存在 |
属性测试 | |
---|---|
-s FILE | 是否存在且非空 |
-t fd | 文件描述符是否在某终端已经打开 |
-N FILE | 文件自从上一次被读取之后是否被修改过 |
-O FILE | 当前有效用户是否为文件属主 |
-G FILE | 当前有效用户是否为文件属组 |
整数比较
只能用于整数
整数1 操作符 整数2
常用操作符 | 含义 |
---|---|
-eq | 第一个数等于(Equal)第二个数 |
-ne | 第一个数不等于(Not Equal)第二个数 |
-gt | 第一个数大于(Greater Than)第二个数 |
-lt | 第一个数小于(Lesser Than)第二个数 |
-le | 第一个数小于或等于(Lesser or Equal)第二个数 |
-ge | 第一个数大于或等于(Greater or Equal)第二个数 |
字符串比较
操作符 | 含义 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,! 号表示相反的意思 |
-z | 字符串为空 |
-n | 字符是否存在 |
#!/bin/bash
read -p "请做出你的选择:" choiceif [ $choice = "123" ]
then
echo "a"
else
echo "cc"
fi[root@localhost data]# bash cs.sh
请做出你的选择:123
a
逻辑测试
操作符 | 含义 |
---|---|
-a或&& | 逻辑与,全真才为真 |
-o | 逻辑或,一真即为真 |
i | 逻辑否 |
逻辑与&&
CMD1 && CMD2
同时满足命令1 和命令2 的要求 才会返回正确 ,输出命令2的结果
全真才为真 一假即为假
第一个CMD1结果为真 ,第二个CMD2必须要参与运算,才能得到最终的结果
第一个CMD1结果为假 ,总的结果必定为假,因此不需要执行CMD2
逻辑或||
CMD1 || CMD2
命令1满足要求,直接输出命令1的结果,不需要命令2参与
如果命令1不满足要求,命令2满足,会输出命令2的结果
一真即为真 第一个CMD1结果为真 (1),总的结果必定为1,因此不需要执行CMD2 第一个CMD1结果为假 (0),第二个CMD2 必须要参与运算,才能得到最终的结果
组合应用
用法只有一个
CMD1 && CMD2 || CMD3
短路与必须在短路或前
if语句
单分支结构
#单分支格式if [ 判断条件 ]
then ; echo " "
else
echo " "
fi
# if 和 fi要对应
多分支结构
#多分支格式if [ 判断 ]
then
echo " "
elif[ ] #可以无限elif
if
...fielse #以上条件都为假
echo " "fi
# if 和 fi要对应
#!/bin/bash# 定义一个变量
read -p "请输入你的年龄:" age if [ $age -ge 18 ]
thenecho "你已经成年了!"
elseecho "你还未成年!"
fi
[root@localhost data]# bash nl.sh
请输入你的年龄:18
你已经成年了!
[root@localhost data]# bash nl.sh
请输入你的年龄:12
你还未成年!
#!/bin/bash
read -p "请输入你的输入分数(0-100):" numif [ $num -ge 85 -a $num -le 100 ]
then
echo "你真厉害"
elif [ $num -ge 70 -a $num -le 84 ]
then
echo "你很棒了"
elif [ $num -ge 0 -a $num -lt 70 ]
then
echo "你仍需努力"
else
echo "你输错了,重新输"bash $0fi[root@localhost data]# bash gl.sh
请输入你的输入分数(0-100):100
你真厉害
[root@localhost data]# bash gl.sh
请输入你的输入分数(0-100):80
你很棒了
[root@localhost data]# bash gl.sh
请输入你的输入分数(0-100):60
你仍需努力
[root@localhost data]# bash gl.sh
请输入你的输入分数(0-100):120
你输错了,重新输
请输入你的输入分数(0-100):0
你仍需努力
case语句
结构
case 变量名 in
case支持glob风格的通配符: * 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
| 或者,如: a|b
#!/bin/bash# 定义一个变量
read -p "这是什么水果:" fruitcase $fruit in"apple")echo "这是一个苹果";;"orange")echo "这是一个橘子";;"banana")echo "这是一个香蕉";;*)echo "这是其他水果";;
esac[root@localhost data]# bash sg.sh
这是什么水果:apple
这是一个苹果
[root@localhost data]# bash sg.sh
这是什么水果:1234
这是其他水果
echo命令
echo -n 表示不换行输出
echo -e 表示输出转义符
选项 | 作用 |
---|---|
\r | 光标移动至行首,并且不换行 |
\s | 当前shell的名称 |
\t | 插入TAB键 |
\n | 输出换行 |
\f | 换行 |
\ | 表示插入“\”本身的转义 |
\b | 表示退格 |
\c | 抑制更多的输出或不换行 |
echo -e "n\n\n\n\n\nw" | fdisk /dev/sdb
#自动磁盘分区