首页 > 系统相关 >Linux系统Shell脚本第二章:条件测试、正整数字符串比较与if、case语句

Linux系统Shell脚本第二章:条件测试、正整数字符串比较与if、case语句

时间:2023-01-29 09:36:03浏览次数:33  
标签:case Shell 正整数 echo 命令 key Linux 执行

目录

一、条件测试

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执行脚本

 

 



标签:case,Shell,正整数,echo,命令,key,Linux,执行
From: https://www.cnblogs.com/yanjing998/p/17071722.html

相关文章

  • Linux系统Shell脚本第一章:Shell脚本基础及时间同步
    目录一、Shell脚本基础1、Shell作用2、什么是Shell脚本及处理逻辑3、shell脚本基本格式4、shell脚本执行方式5、实操演示二、Shell脚本中的变量1、变量的作用2、......
  • Linux网络第六章:PXE高效批量网络装机及kickstart无人值守安装
    目录一、PXE基础知识二、PXE使用服务三、高效批量网络装机实操1、环境准备2、配置dhcpd服务3、配置FTP服务4、配置TFTP服务5、配置kickstart无人值守6、启动服务......
  • bash:多重选择 - CASE
    bash:多重选择-CASE    一、说明 1、“case”使用    二、代码1[root@rockyshell]#catmcondition2#!/usr/bin/envbash345......
  • linux命令2
    ⽹络不通排查流程1.确认⽹关地址是否通畅2.确认⽹卡配置是否正确3.确认⽹络管理服务关闭 systemctlstopNetworkManager systemctldisableNetworkManageret......
  • linux系统下安装jdk8/tomcat9/mysql8.0
    这两天学习linux的使用,今天初步安装好了java8和tomcat9,mysql8,记录下安装经历使用Linux系统版本CentOS-7-x86_64-DVD-2009linux有4中软件安装方式;1.二进制发布包安......
  • linux基础命令
    linux基础命令前期必备知识1.命令提示符[root@jasonNB~]#root表示⽤户名信息@为分隔符jasonNB为主机名称~表示所处⽬录位置......
  • [转]dvwa安装、配置、使用教程(Linux)
    本文转自:https://www.cnblogs.com/lsdb/p/6826519.html一、搭建LAMP环境首先搭建好LAMP环境,如没配好参见“Linux+Apache+MySQL+PHP配置教程”或者使用官方推荐的XAMPP:h......
  • Linux操作系统导学专栏(一)——专栏要讲些什么?
    该专栏是为Linux内核开发编程做铺垫,如果你对操作系统很熟悉,想了解一些Linux内核发开的知识,请直接跳转至《Linux内核编程专栏》,如果你对Linux内核编程也很熟悉,想了解Linux内......
  • Linux操作系统导学专栏(一)——专栏要讲些什么?
    ​该专栏是为Linux内核开发编程做铺垫,如果你对操作系统很熟悉,想了解一些Linux内核发开的知识,请直接跳转至《Linux内核编程专栏》,如果你对Linux内核编程也很熟悉,想了解Lin......
  • (二)Linux软件安装
    Linux软件安装1、软件安装方式1)二进制发布包安装2)rpm安装3)yum安装4)源码编译安装2、安装JDK1)使用FinalShell工具将JDK的二进制发布包上传到Linux2)解压安装包,命令:tar......