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.工具箱
需求:做一个将一些工具统一在一起的窗口


本文详细介绍了Shell脚本中的条件测试,包括文件、数字和字符串的比较,以及流程控制结构如if和case语句的使用。通过具体示例,帮助读者掌握Shell脚本的逻辑控制技巧。

被折叠的 条评论
为什么被折叠?



