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

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

时间:2023-02-14 17:46:12浏览次数:42  
标签:case Shell 正整数 echo 命令 key Linux 执行

一、条件测试
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/esec/p/17120394.html

相关文章

  • Linux系统Shell脚本 shell函数
    一、shell函数1、函数的作用定义较为复杂的但是需要重复使用的内容,以便再次使用可以直接调用函数节约时间,提高效率 2、函数使用步骤①首先是定义函数 ②其次是调用函......
  • Linux系统Shell脚本:for、while循环及脚本实操
    一、echo命令echo-n表示不换行输出echo-e输出转义字符,将转义后的内容输出到屏幕上常见转义字符:  示例1:echo-n表示不换行输出   示例2:echo-e 输出转......
  • Linux系统Shell脚本:shell数组、正则表达式及文件三剑客之AWK
    一、shell数组1、数组分类①关联数组:必须声明才可以使用,命令:delare-A数组名②普通数组:利用数字下标节约变量,可以不声明也可以声明,命令:delare-a数组名delare-a命令也......
  • Linux系统安全及应用
    1.账号安全基本措施1.1系统账号清理(1)将非登录用户的shell设为/sbin/nologin:命令行格式:usermod-s/sbin/nologin用户名   (2)锁定长期不使用......
  • Linux基础——网络配置与系统管理
    、网络配置1.VMware网络连接模式桥接模式:虚拟机直接连接外部物理网络的模式,主机起到了网桥的作用,虚拟机可以直接访问外部网络,对外部网络可见,但是分配的地址需要在同个......
  • Linux日志文件及如何使用rsyslog搭建小型日志服务器
     一、日志文件1、日志作用2、常用日志3、日志级别二、Rsyslog日志处理系统1、使用Rsyslog创建日志有点2、Rsyslog配置文件解析3、使用rsyslog将ssh服务的日志单......
  • linux Usb serial console
    ubuntuUsbserialconsole能够把下电时打印输出到串口上,可以记录,而netconsole只能输出下电到disk之前的打印Usb串口线,ftdi或pl2303都可以如果是ubuntu,需要重新编译......
  • linux本地文件夹双向同步
    前言​ 开发时习惯将所有项目将在统一文件夹下,运行目录在其它目录;如果每次修改后又copy到运行目录就很蛋疼,于是找到了同步本地文件夹这个解决方法。监听工作目录的文件修......
  • Linux系统的网卡路由配置
    (Linux系统的网卡路由配置)一、查看系统路由[root@control~]#route-nKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRef......
  • 用 shell 脚本做命令行工具扩展----服务器客户端之间文件传输
    问题的提出公司开发机与远程服务器之间有严格的隔离策略,不能直接使用ssh登录,而必需通过跳板机。这样一来,本地与服务器之间的一些文件传输变得非常不便。经过咨询,运维教......