目录
一,条件语句
1.1条件测试test
1.2文件测试
二,整数测试
1.1整数值比较
1.2常用的测试操作符
三,字符串测试
1.字符串比较
2,常用的测试操作符
四,逻辑测试
1基本格式
2常用的测试操作符
五,循环语句echo命令
六,for
七,while和until
八,菜单
一,条件语句
1.1条件测试test
test测试文件的表达式是否成立,当条件成立时候,返回值为0,其余时间为非0值。
格式1:test 条件表达式 格式2:[ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用)
1.2文件测试
文件测试基本格式为:
[ 操作符 文件或目录 ] (注意两端要有空格) &? 返回0表示条件成立,返回非零值表示条件不成立 && 逻辑与,"而且"的意思 || 逻辑或,"或者"的意思
常见的测试操作符
| 操作符 | 解释 |
| -d | 测试是否为目录 |
| -e | 测试目录或文件是否存在 |
| -a | 测试目录或文件是否存在 |
| -f | 测试是否为文件 |
| -r | 测试当前用户是否有权限读取 |
| -w | 测试当前用户是否有权限写入 |
| -x | 测试当前用户是否有权限读取 |
| -L | 测试是否为软连接文件 |
解释:条件测试在判断某需求是否满足要求时,需要由测试机制来实现,测试过程中,实现评估布尔声明,以便于在条件性环境进行执行,若为真,则状态码变量$?返回0,若为假,则状态码变量$?返回1(或者不等于0的数)。
举例:
[root@localhost ~]# test -f 1.txt #此处如果不想写[]可以输入test [root@localhost ~]# echo $? 1 #因为等于1,所以执行为错误 [root@localhost ~]# [ -f 1.txt ] [root@localhost ~]# echo $? 1 #由于未创建1.txt的文件所以失败 [root@localhost ~]# touch 1.txt [root@localhost ~]# [ -f 1.txt ] #一定要注意前后空格!!!!! [root@localhost ~]# echo $? 0 #此处为正确演示
[root@localhost ~]# test -e yanshi.sh &&echo "yes" yes [root@localhost ~]# 此处&&表示为前面测试该文件是否存在,如果存在输出yes(此处不验证脚本的正确性)
有一个特别注意的地方:
此处没有任何权限但是显示为0
[root@localhost ~]# ll /etc/shadow ----------. 1 root root 1192 10月 26 08:30 /etc/shadow [root@localhost ~]# [ -r /etc/shadow ] [root@localhost ~]# echo $? 0
二,整数测试
1.1整数值比较
命令基本格式
[ 整数1 操作符 整数2 ]
1.2常用的测试操作符
命令基本格式 [ 整数1 操作符 整数2 ]
1.2常用的测试操作符
| 操作符 | 解释 |
| -eq | 等于(Equal) |
| -ne | 不等于(Not Equal) |
| -gt | 大于(Greater Than) |
| -lt | 小于(Lesser Than) |
| -le | 小于或等于(Lesser or Equal) |
| -ge | 大于或等于(Greater or Equal) |
三,字符串测试
1.字符串比较
常用的格式:
格式一:[ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ] 格式二:[ -z 字符串 ]
2,常用的测试操作符
| 常用的测试操作符 | 解释 |
| = | 第一个字符串和第二个字符串内容相同 |
| != | 第一个字符串和第二个字符串内容不相同,!表示相反的意思 |
| -z | 检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串 |
| -n | 检测字符串是否存在 |
四,逻辑测试
1基本格式
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式二: 命令1 操作符 命令2 ...
2常用的测试操作符
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ... 格式二: 命令1 操作符 命令2 ...
2常用的测试操作符
| 常用的测试操作符 | 解释 |
| && | 逻辑与,“而且”的意思,使用test命令时,可以将&&改为“-a” |
| || | 逻辑或,“或者”的意思,使用test命令时,可以将||改为“-o” |
| ! | 逻辑否 |
注意:&&符号不可以在一个[]中使用,但是可以在两个[]之间使用
小脚本:ping
-c:发送包的个数
-i :发送的间隔时间
-W :超时时间
-w :多少秒后停止ping操作
五,分支结构
单分支
if 判断条件; then 条件为真的分支代码 fi
双分支
if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi
多分支
if 判断条件1; then 条件1为真的分支代码 elif 判断条件2; then 条件2为真的分支代码 elif 判断条件3; then 条件3为真的分支代码 ... else 以上条件都为假的分支代码 fi
.1case
格式:
case 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; ... *) 默认分支 ;; esac
注意:case支持glob风格的通配符:
* 任意长度任意字符
? 任意单个字符
[] 指定范围内的任意单个字符
| 或者,如: a|b
| n | 输出换行 |
|---|---|
| r | 光标移至行首,并且不换行 |
| s | 当前shell的名称,如bash |
| t | 插入Tab键 |
| f | 换行,但光标仍停留在原处 |
| 表示插入""本身 | |
| b | 表示退格 不显示钱一个字符 |
五,循环语句echo命令
| 选项 | 作用 |
|---|---|
| n | 输出换行 |
| r | 光标移至行首,并且不换行 |
| s | 当前shell的名称,如bash |
| t | 插入Tab键 |
| f | 换行,但光标仍停留在原处 |
| 表示插入""本身 | |
| b | 表示退格 不显示钱一个字符 |
| c | 抑制更多的输出或不换行 |
查看当前系统时间date
| -d | 你描述的日期,显示指定字符串所描述的时间,而非当前时间 |
| %F | 完整日期格式,等价于%Y-%m-%d |
| %T | 时间(24小时制)(hh:mm:ss) |
循环含义:
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件重复运行次数
循环次数事先已知
循环次数事先未知
六,for
执行机制,便利
执行机制:一次将列表中的元素复制给“变量名”;每次赋值后即执行一次循环体;知道列表中的元素耗尽,循环结束。
如果省略[inWORDS...],此时使用位置变量 in “%$”
$RANDOM 取值范围:0-32767
七,while和until
相对于for,需要知道循环次数
我们只知道停止条件,不知道次数,就需要使用while
直到达到条件
while 当命令判断为假时停止 until 当命令判断为真时停止
双重循环及跳出循环
break跳出单个循环后面加数字2则代表跳出两层循环
continue终止某次循环中的命令,但是不会完全终止命令



