Linux系统Shell脚本第二章:条件测试、正整数字符串比较与if、case语句
目录
一、条件测试
1、三种测试方法
2、 正整数值比较
3、字符串比较
4、逻辑测试
二、脚本中常用命令
1、echo命令
2、date命令
3、cal命令
4、tr命令
5、cut命令
6、sort命令
7、uniq命令
8、cat多行重定向
三、if语句
1、使用格式
2、if语句实例
四、case语句
1、使用格式
2、case语句实例
一、条件测试
1、三种测试方法
①test命令测试
②[ ]测试(注意前后需要有空格)
③[[ ]]加强版[ ],测试支持通配符和正则表达式
三种测试方法选项:
-d 测试是否为文件夹
-f 测试是否为普通文件
-e 测试文件或目录是否存在
-a 测试文件或目录是否存在,不建议使用此选项。取反!=时echo $?是错误的返回值。
-L 测试是否为软连接文件
-r 判断当前用户是否有读权限,根据实际情况返回结果,不是按ll显示的文件属性权限。
-w 判断当前用户是否有写权限,根据实际情况返回结果,不是ll显示的文件属性权限。
-x 判断当前用户是否有可执行权限,根据实际情况返回结果,root账户时其他用户有执行权限root账户也有,若其他账户没有执行权限则root也没有。
2、 正整数值比较
比较方法使用上述三种条件测试即可,①test命令②[ ] 注意前后空格③[[ ]]注意前后空格
选项:
-eq 比较第一个正整数是否等于(equal)第二个正整数
-ne 比较第一个正整数不等于(not equal)第二个正整数
-gt 比较第一个正整数是否大于(Greate than)第二个正整数
-lt 比较第一个正整数是否小于(Lesser than)第二个正整数
-ge 比较第一个正整数是否大于等于(Greate or equal )第二个正整数
-le 比较第一个正整数是否小于等于(Lesser or equal)第二个正整数
3、字符串比较
比较方法使用上述三种条件测试即可,①test命令②[ ] 注意前后空格③[[ ]]注意前后空格
选项:
= 等号前后字符串是否相等,注意前后需要空格。
!= !表示取反的意思,等号前后字符串是否不相等,注意前后需要空格。
-z 判断字符串是否为空。
-n 字符是否存在。
4、逻辑测试
①格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
②格式2:命令1 操作符 命令2
操作符:
&&或-a 表示且的意思,前面表达式或命令1为真才会执行操作符后面的表达式2或命令2。一假则为假。
||或-o 表示或的意思,前面表达式1或命令1为真则整个表达式为真,前面表达式为假或命令为假才会执行后面的表达式2或命令2 。一真则为真。
! 逻辑否。
二、脚本中常用命令
1、echo命令
echo命令:打印内容在窗口中
①echo -n 表示输出不换行
②echo -e 表示输出转义符
echo -e 配合转义符
\b 退格,删除前一个字符。例如 echo -e "1234\b56" 则输出的是12356,4会被删除。
\c 抑制更多输出,\c后的内容全部不输出。例如 echo -e "123\c456"则输出的是123。
\n 输出换行,\n后的内容换行。例如 echo -e "123\n456 " 则输出123下一行输出456。
\t 相当于输出过程中按了一下tab键。
\f 输出换行但是光标位置不变。例如echo -e "123\f456"则输入123下一行开头空出123的位置然后再输出456
2、date命令
date命令:查看时间,显示格式为,星期 月 日 时分秒 年
选项:
+%F 输出格式年-月-日,注意%在crontab定时中不能直接使用,需要转义
+%T 输出格式时:分:秒, 注意%在crontab定时中不能直接使用,需要转义
3、cal命令
cal命令:显示当月日历。
选项:
cal 12 显示本年整年日历
cal 某年 显示此年完整日历
4、tr命令
tr命令:替换内容
基本格式:tr 需要替换的内容 替换后的内容
例如: tr [a-z] [A-Z] 遇见小写字母全部转为大写字母
选项:
-s 压缩功能。例如 tr -s aaa 输出a。
-d 删除功能。例如 tr -d abc 则输入123abc回车只会打印123。
-c 用字符串1中字符集的补集替换此字符集,例如 cat /dev/random | tr -dc [[:alnum:]] | head -c 12。 /dev/random中是随机的字符内容 -dc 表示删除其他不需要内容 [[:alnum:]] 表示数字和字符 head -c 12 表示取前12个字符,完整表达式意思为查看random文件并将非字符和数字内容删除然后取前12个字符,常用于生成随机密码。
5、cut命令
cut命令:提取想要的信息。
选项:
-d 指定分隔符 例如 cut -d ":"指定:为分隔符。
-f 选择第几列 例如 cut -f3 取第三列,-f1,3取第1列和第三列,-f1-3取1-3列。
6、sort命令
sort命令:排序
选项:
-r 执行反方向(由上至下)整理
-n 按数字大小排序,默认第一列默认按字母顺序
-t 指定分隔符
-k 指定列 ,例如 -k3
7、uniq命令
uniq命令:去除连续的重复,一般配合sort使用
-c 显示每个重复出现的次数
split 命令:分隔大文件
-b 大小(例如1G) +要分隔文件名 加名称分隔指定名称,但是后面的xaa,xab不能指定,只能指定x。
8、cat多行重定向
cat <<EOF
1
2
3
EOF
打印123到屏幕
三、if语句
1、使用格式
if [条件判断]
then (条件1成立则走then)
[执行命令]
elif [条件判断2 ] (可添加多个elif )
then (条件2成立则走then)
[执行命令]
else (所有条件不成立则走else)
[执行命令]
fi (if结束语句)
2、if语句实例
学生输入分数判断自己的成绩是优秀(91-100)、良好(81-90)、及格(60-80)、不及格(小于60)
vim a.sh #创建脚本文件,注意必须.sh结尾
脚本内容:
#!/bin/bash #脚本解释器
read -p "请输入你的成绩进行判断(0-100): " key #读取用户输入的内容为变量key
if [ $key -ge 91 -a $key -le 100 ] #条件1:如果key大于等于91且小于等于100则执行then
then #key符合条件1执行此then
echo "你的成绩为优秀"
elif [ $key -ge 81 -a $key -le 90 ] #条件2:如果key大于等于81且小于等于90则执行then
then #key符合条件2执行此then
echo "你的成绩为良好"
elif [ $key -ge 60 -a $key -le 80 ] #条件3:如果key大于等于60且小于等于80则执行then
then #key符合条件3执行此then
echo "你的成绩为及格"
elif [ $key -lt 60 ] #条件4:如果key大于等于60且小于等于80则执行then
then #key符合条件4执行此then
echo "你的成绩为不及格"
else #key不符合上述任何条件则执行else
echo "输入错误,请输入0-100的正整数"
fi #结束语fi
chmod +x a.sh #脚本添加执行权限
bash a.sh #使用shell执行脚本,也可使用路径方式执行
四、case语句
1、使用格式
case 变量引用 in
PAT1) 符合条件1执行分支1的命令,PAT1可以使用通配符
分支1命令
;; 每个分支结束的固定格式
PAT2) 符合条件1执行分支2的命令,PAT2可以使用通配符
分支2命令
;; 每个分支结束的固定格式,可以有多个分支
*) 不符合其他任意分支的默认分支
默认分支命令
;; 分支结束的固定格式
esac case语句结束标志
2、case语句实例
vim case.sh #创建case.sh脚本
case.sh脚本内容:
#!/bin/bash #shell声明
cat <<EOF #cat多行重定向
1.关闭防火墙 #将1,2,3内容打印出来
2.临时关闭selinux
3.查看当前用户
EOF #多行重定向结束
read -p "请选择操作内容(1-3):" key #读取用户输入内容为变量key
case $key in #case判断 变量$key
1) #若$key等于1则执行1)内容
systemctl stop firewalld; #临时关闭防火墙命令
;; #每个分支结束符
2) #若$key等于2则执行2)内容
setenforce 0; #临时关闭selinux
;; #每个分支结束符
3) #若$key等于3则执行3)内容
user=`whoami` #定义变量user调用whoami命令执行结果反向单引号调用
echo "当前用户为$user" #输出内容当前用户为$user
;;
*) #若$key不满足上述任一条件则执行默认内容*)
echo "输出错误,请输入1-3进行选择"
esac #case语句结束标志
chmod +x case.sh #脚本添加可执行权限
bash case.sh #通过shell执行脚本
Linux系统Shell脚本第二章:条件测试、正整数字符串比较与if、case语句的更多相关文章
- SHELL脚本编程的条件测试
SHELL脚本编程的条件测试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.条件测试概述 判断某需求是否满足,需要由测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过 ...
- shell脚本进阶之条件测试与条件语句
接着上篇博客,今天整理一下关于条件测试和条件语句方面的知识. shell脚本进阶之条件测试 在编写shell脚本时,经常需要对一些条件进行判断,可以使用测试命令test辅助完成测试过程.t ...
- Linux系统——shell脚本
shell脚本编程 作用:通过命令行解析的方式,自动执行设定好的程序或命令代码.(若将脚本挂到定时任务中,就会自动在非工作时间里自动触发执行程序) Shell脚本文件以“.sh”结尾 规范的Shell ...
- Linux系统Shell脚本编程
1. shell脚本概念:C语言编写的.命令解释器.编程语言. 是用户使用linux的桥梁. shell脚本语言非常擅长处理文本类型的数据. 2. shell脚本作用:自动化管理.监控管理.日志数据处 ...
- Linux系统——shell脚本应用示例
传入一个网段地址,自动找出本网段内存活的IP地址.2,将存活的IP地址当作密码来创建Linux用户,用户名格式为:你的名字_数字 3,有几个存活IP地址,就自动创建几个用户 4,最后将创建的用户名 ...
- shell脚本中的条件测试if中的-z到-d的意思
文件表达式 if [ -f file ] 如果文件存在if [ -d ... ] 如果目录存在if [ -s file ] 如果文件存在且非空 if [ -r file ] ...
- 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本
一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...
- linux服务器批量部署应用系统shell脚本(Tomcat/jetty)
linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-t ...
- linux备忘录-shell脚本
知识 shell执行方式 shell执行方式有 通过source或. 在现在的bash环境中执行脚本 变量等会保持 通过bash shell.sh或sh shell.sh 使用一个新的bash环境执行 ...
- Shell脚本的编写及测试
Shell脚本的编写及测试 1.1问题 本例要求两个简单的Shell脚本程序,任务目标如下: 编写一 ...
随机推荐
- 编程思想转换-Lambda表达式
编程思想转换 做什么,而不是怎么做 我们真的希望创建一个匿名内部类对象吗?不.我们只是为了做这件事情而不得不创建一个对象.我们真正希望做的事情是︰将run方法体内的代码传递给 Thread类知晓. 传 ...
- 10月26日内容总结——第三方模块下载与requests、openpyxl模块
目录 一.第三方模块的下载与使用 下载第三方模块的方式一:pip工具 部分错误解决案例: 下载第三方模块的方式二:pycharm中下载 pip仓库地址 二.网络爬虫模块之requests模块 1.ge ...
- .Net Core对于`RabbitMQ`封装分布式事件总线
首先我们需要了解到分布式事件总线是什么: 分布式事件总线是一种在分布式系统中提供事件通知.订阅和发布机制的技术.它允许多个组件或微服务之间的协作和通信,而无需直接耦合或了解彼此的实现细节.通过事件总线 ...
- Java堆外缓存(一个很有意思的应用)
我们在开发过程中会遇到这样的场景:就是一个服务的各项 JVM 的配置都比较合理的情况下,它的 GC 情况还是不容乐观.分析之后发现有 2 个对象特别巨大,占了总存活堆内存的 90%以上.其中第 1 大 ...
- Maven配置 阿里云镜像地址
<?xml version="1.0" encoding="UTF-8"?> <settings> <mirrors> &l ...
- 树莓派开机启动VNC
sudo nano /etc/init.d/vncserver #!/bin/sh ### BEGIN INIT INFO # Provides: vncserver # Required-Start ...
- 栈——stack的用法
介绍 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到 ...
- 免杀之:Mimikatz 免杀过杀软,思路学习
免杀之:Mimikatz 免杀过杀软 目录 免杀之:Mimikatz 免杀过杀软 1 环境准备 2 处理过程 2.1 生成原始的Mimikatz程序 2.2 定位到代码或字符串上特征绕过 2.3 定位 ...
- Prometheus安装部署(主体)
Prometheus安装部署 一,下载安装包并解压 下载地址:https://github.com/prometheus/prometheus/releases 因为服务器上下载速度太慢,所以可以提前 ...
- Java项目常用的异常处理
一.常见异常形式 1.空指针异常(java.lang.nullpointerexception)发生该情况一般是字符串变量未初始化,数组未初始化,类对象未初始化等.还有一种情况是当该对象为空时你并没有 ...