Shell之判断
一、Shell条件测试
1.条件表达式格式
- test 条件表达式
- [ 条件表达式 ]
- [ 条件表达式 ]]
2.文件测试
[ 操作符 文件或目录 ]
符号 | 解释 |
---|---|
! | 结果取反 |
-f filename | 当filename 存在时返回真 |
-b filename | 当filename 存在并且是块文件时返回真(返回0) |
-d pathname | 当pathname 存在并且是一个目录时返回真 |
-h filename | 当filename 存在并且是符号链接文件时返回真 (或 -L filename) |
-u pathname | 当由pathname 指定的文件或目录存在并且设置了SUID 位时返回真 |
-c filename | 当filename 存在并且是字符文件时返回真 |
-e pathname | 当由pathname 指定的文件或目录存在时bvdff返回真 |
-g pathname | 当由pathname 指定的文件或目录存在并且设置了SGID 位时返回真 |
-k pathname | 当由pathname 指定的文件或目录存在并且设置了"粘滞"位时返回真 |
-p filename | 当filename 存在并且是命名管道时返回真 |
-r pathname | 当由pathname 指定的文件或目录存在并且可读时返回真 |
-s filename | 当filename 存在并且文件大小大于0 时返回真 |
-S filename | 当filename 存在并且是socket 时返回真 |
-t fd | 当fd 是与终端设备相关联的文件描述符时返回真 |
-w pathname | 当由pathname 指定的文件或目录存在并且可写时返回真 |
-x pathname | 当由pathname 指定的文件或目录存在并且可执行时返回真 |
-O pathname | 当由pathname 存在并且被当前进程的有效用户id 的用户拥有时返回真(字母O 大写) |
-G pathname | 当由pathname 存在并且属于当前进程的有效用户id 的用户的用户组时返回真 |
file1 -nt file2 | file1 比file2 新时返回真 |
file1 -ot file2 | file1 比file2 旧时返回真 |
3.数字比较
[ 整数1 操作符 整数2 ]
中括号与数值字符之间一定要加空格
符号 | 含义 |
---|---|
[ 1 -gt 10 ] | 大于 |
[ 1 -lt 10 ] | 小于 |
[ 1 -eq 10 ] | 等于 |
[ 1 -ne 10 ] | 不等于 |
[ 1 -ge 10 ] | 大于等于 |
[ 1 -le 10 ] | 小于等于 |
一般不会让我们单独使用,配合上一命令返回值 ==$?==使用较多
4.字符串比较
[ "字符串" = "字符串" ]
二、流程控制 If
1.单分支语句
需求:编写脚本,由用户输入用户名,如果用户不存在,则创建该用户,并设置密码为123456
2.双分支语句
需求:编写脚本,由用户输入用户名,如果用户不存在,则创建该用户,并设置密码为123456;否则,提示用户已经存在
需求:编写脚本,由用户输入用户名,判断该用户的uid及gid,如果相同,则显示Good user;
否则显示Bad user.
3.多分支结构
4.嵌套结构
三、流程控制case
1.简单的模式匹配
案例1:在用户来看车的时候询问[Y/N] 然后询问用户年龄 是否成年
2.登录跳板主机
案例2:简单的JumpServer
3.工具箱
需求:做一个将一些工具统一在一起的窗口