当前位置: 首页 > news >正文

38.Shell脚本编程2

文章目录

  • Shell脚本编程2
    • 数值计算
      • 整数运算
      • 小数运算
    • 条件测试
      • 文件测试
      • 目录判断
      • 字符串判断
      • 数值判断
      • 逻辑操作符判断
    • 判断表达式 test、[]、[[]]、(())的区别总结

Shell脚本编程2

数值计算

整数运算

[hxl@server ~ 14:38:25]$ echo $[1+2]
3
[hxl@server ~ 14:39:34]$ echo $[$(echo {1..100} | sed 's/ /+/g')]
5050
[hxl@server ~ 14:39:55]$ echo $(( $(echo {1..100} | sed 's/ /+/g') ))
5050
[hxl@server ~ 14:40:59]$ echo $(( 1+2 ))
3
[hxl@server ~ 14:41:20]$ echo $?
0
[hxl@server ~ 14:41:34]$ let sum=1+2
[hxl@server ~ 14:41:41]$ echo $sum
3

小数运算

使用bcawk工具。

bc是 Linux 下的计算器工具,支持浮点数运算

[hxl@server ~ 14:42:06]$ echo $[ 1.1 + 2.2 ]
-bash: 1.1 + 2.2 : 语法错误: 无效的算术运算符 (错误符号是 ".1 + 2.2 "[hxl@server ~ 14:42:27]$ echo 1.1+2.2 | bc
3.3

推荐使用bc,它是 Linux 下的计算器工具,支持浮点数运算

条件测试

控制语句:
1.按顺序执行
2.分支执行:满足条件1,执行;不满足条件,执行另外任务;
3.重复执行

文件测试

运算符含义示例
-f是普通文件[ -f "file" ]
-d是目录[ -d "dir" ]
-r可读[ -r "file" ]
-w可写[ -w "file" ]
-x可执行[ -x "file" ]
-e存在[ -e "file" ]

目录判断

如果目录不存在则创建

[hxl@server ~ 15:02:15]$ test ! -d /tmp/zhangsan && mkdir /tmp/zhangsan
[hxl@server ~ 15:03:16]$ echo $?
0

第二次执行,目录已经存储

[hxl@server ~ 15:03:22]$ test ! -d /tmp/zhangsan && mkdir /tmp/zhangsan
[hxl@server ~ 15:03:30]$ echo $?
1

如果目录存在,就提示目录存在

[hxl@server ~ 15:03:35]$ test -d /tmp/zhangsan && echo /tmp/zhangsan is exist.
/tmp/zhangsan is exist.

字符串判断

运算符含义示例
=等于[ "$a" = "$b" ]
!=不等于[ "$a" != "$b" ]
-z长度为0[ -z "$a" ]
-n长度不为0[ -n "$a" ]
[hxl@server bin 15:15:41]$ vim ssh_ctl
#!/bin/bash# 确保脚本以root身份运行test "$USER" != "root" && echo Pls run as root. && exit
systemctl $1 sshd[hxl@server bin 15:18:07]$ bash ssh_ctl status
Pls run as root.
[root@server bin 15:18:38]# cd /home/hxl/bin
[root@server bin 15:18:54]# bash ssh_ctl status
● sshd.service - OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since 四 2025-10-09 11:18:07 CST; 4h 0min agoDocs: man:sshd(8)man:sshd_config(5)Main PID: 1539 (sshd)CGroup: /system.slice/sshd.service└─1539 /usr/sbin/sshd -D... ...

数值判断

(( ))或者[ ]中比较符号== = ! = > < >= <=

[hxl@server ~ 15:56:53]$ [[ 98 == 99 ]] && echo ture
[hxl@server ~ 15:57:05]$ [[ 98 = 99 ]] && echo ture || echo false
false
[hxl@server ~ 15:57:13]$ [[ 98 = 99 ]] && echo ture
[hxl@server ~ 15:57:37]$ [[ 98 != 99 ]] && echo ture
ture
[hxl@server ~ 15:57:41]$ [[ 98 < 99 ]] && echo ture
ture
[hxl@server ~ 15:57:50]$ [[ 98 > 99 ]] && echo ture# []中不支持使用<= >= 判断,要使用(())[hxl@server ~ 15:57:54]$ [[ 98 >= 99 ]] && echo ture
-bash: 条件表达式中有语法错误
-bash: `99' 附近有语法错误
[hxl@server ~ 15:57:59]$ (( 98 >= 99 )) && echo ture
[hxl@server ~ 15:58:37]$ (( 98 <= 99 )) && echo ture
ture
[hxl@server ~ 15:58:43]$ (( 98 != 99 )) && echo ture
ture# (())中= 表示赋值,判等使用==,[]中可以直接使用= 判等[hxl@server ~ 15:58:54]$ (( 98 = 99 )) && echo ture
-bash: ((: 98 = 99 : 尝试给非变量赋值 (错误符号是 "= 99 ")
[hxl@server ~ 15:59:00]$ (( 98 == 99 )) && echo ture
[hxl@server ~ 15:59:05]$

示例:编写一个数值判断脚本

[hxl@server ~ 16:05:14]$ cd bin
[hxl@server bin 16:05:27]$ vim test_num.sh
#!/bin/bashread -p "请输入一个数字:" num大于 10(( $num>10 )) && echo "$num > 10"小于 10(( $num<10 )) && echo "$num < 10"等于 10(( $num==10 )) && echo "$num = 10"[hxl@server bin 16:05:54]$ bash test_num.sh 
请输入一个数字:23
23 > 10

逻辑操作符判断

表达式中逻辑操作符使用说明如下:

[]和test中逻辑操作符[[]]和(())中逻辑操作符说明
-a&&and,与,两端都为真,则结果为真
-oIIor,或 ,两端有一个为真,则结果为真
!!not,非,两端相反,则结果为真

对于上述操作符,有如下提示:

  • 逻辑操作符前后的表达式是否成立,一般用真假来表示。
  • "!"的中文意思是反,即与一个逻辑值相反的逻辑值。
  • -a的中文意思是“与”(and或&&),前后两个逻辑值都为“真”,综合返回值才为“真”,反之为“假”。
  • -o的中文意思是“或”(or或||),前后两个逻辑值只要有一个为“真”,返回值就为“真”。

表达式外:&&或||可用于连接两个含[]、test或[[]]的表达式:

  • 使用&&表达式时:

    • 当左边为真,右边表达式才会执行。

    • 当左边为假,右边表达式不会执行。

  • 使用||的表达式时:

    • 当左边为真,右边表达式不会执行。

    • 当左边为假,右边表达式才会执行。

判断表达式 test、[]、[[]]、(())的区别总结

判断表达式符号[]test[[]](())
边界是否需要空格需要需要需要不需要
逻辑操作符!、-a、-o!、 -a、 -o!、&&、||!、&&、||
整数比较操作符-eq、-ne、-gt、-ge、-lt、-le-eq、-ne、-gt、-ge、-lt、-le-eq、-ne、-gt、-ge、-lt、-le=、!=、>、>=、<、<=
字符串比较操作符=、== 、!==、== 、!==、== 、!=== 、!=
是否支持通配符匹配不支持不支持支持(=~)不支持
http://www.dtcms.com/a/466087.html

相关文章:

  • ETLCloud-重塑制造业数据处理新范式
  • 【JavaSE】JVM
  • 部分网站dns解析失败wordpress 图片预加载
  • django 网站开发案例公众号微信
  • 数据库进阶实战:从性能优化到分布式架构的核心突破
  • MySQLEXPLAIN命令详解从执行计划看SQL性能优化
  • leetcode 506 斐波那契数
  • Linux 命令:mount
  • JavaWeb——Servlet生命周期
  • JavaWeb——(web.xml)中的(url-pattern)
  • 企业网站建设合作协议范文天津城市建设大学网站
  • 新专业加速落地!设备采购先行,工业视觉人才培养破局。
  • FastAPI 入门:从环境搭建到实战开发的完整指南
  • Redis的String详解
  • MySQL事务隔离级别详解从读未提交到可串行化
  • 网站域名注册空间app外包
  • 赣州网站推广公司微网站建设是什么
  • 图扑 HT 架构下 AR 应用开发与行业解决方案实现
  • 测试实战心得
  • 网页网站设计价格为什么我做的视频网站播放不了
  • 前端框架深度解析:Vue.js 3 从 Composition API 到生态升级,解锁企业级开发新能力
  • DataX适合全量同步和简单的增量场景
  • 实体门店怎么使用小程序?实体店如何做小程序店铺?
  • 服装公司网站建设方案渭南做网站博创互联
  • 基于GPS/PTP/gPTP的自动驾驶数据同步授时方案
  • 福田网站建设龙岗网站建设龙岗网站建设龙岗网站建设中关村手机之家官网
  • solr负查询失效
  • GSPO如何消除高方差且不依赖routing replay
  • 南宁电子推广网站河南网站建设技术公司
  • 泰安房产网站建设设计网页公司哪家好