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

Shell编程-2

1. $*和$@区别

$* 加双引号"$*"在循环中,会将所有的参数合并成一个参数 $@ 加双引号"$@"在循环中,所有的参数单独输出,一个一个输出

2. 特殊变量-不常用

特殊符号

$$

记录当前脚本的pid

$!

记录上一个脚本的pid

$_

记录上一个命令最后一个参数,使用esc + . 可以调取这个参数

${#变量}

变量的字符数

3. 判断

  • 条件表达式/条件测试语句
&& 并且,前一个命令成功,然后执行后面的命令 || 或者,前一个命令失败,然后执行后面的命令

3.1. 文件目录相关判断

文件目录判断

-f

文件是否存在

-d

目录是否存在

-x

文件是否有执行权限

-s

文件存在,大小大于0

-h或-L

软链接是否存在

3.1.1. 案例

  • 案例01:属性文件类型检查脚本
1.判断是否为文件 判断是否有执行权限 判断大小是否为0 2.判断是否为目录 3.判断是否为软链接 4.输出其他类型文件......
#!/bin/bash ############################################################## # File Name: check_type.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #1.vars file=$1 #2.check if [ $# -ne 1 ];then echo "use $0 file" exit 1 fi #3.check_link if [ -L ${file} ];then echo "${file}是软链接" exit fi #4.check_file if [ -f ${file} ];then if [ -x ${file} ];then excu=有执行权限 elif [ -s ${file} ];then size=文件有内容,非空 else excu=无执行权限 fi echo "${file} 文件存在" echo "${size}" echo "${excu}" exit fi #5.check_dir if [ -d ${file} ];then echo "${file}是目录" exit fi #6.其他 echo "${file}是其他类型"

3.2. 字符串对比

字符串对比

"字符" = "字符"

字符串等于

!=

不等于

-z

zero是否为空

-n

not zero不为空

3.2.1. 案例

  • 案例09:书写服务检查脚本,检查服务是否运行,检查服务是否开机自启动
  1. 脚本流程
1.bash check_service.sh crond 2.是否正在运行 3.是否开机自启动
  1. 编写脚本
#!/bin/bash ############################################################## # File Name: check_service.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #1.vars service=$1 #2.check if [ $# -ne 1 ];then echo "use $0 service" exit 1 fi #3.check_running running=`systemctl is-active $1` if [ "${running}" = "active" ];then echo "${service}正在运行" else echo "${service}没有运行" fi #4.check_enable enable=`systemctl is-enabled $1` if [ "${enable}" = "enabled" ];then echo "${service}开机自启动" else echo "${service}没有自启动" fi

3.3. 逻辑

逻辑

-a

and 并且

-o

or 或者

!

取反

案例:

#!/bin/bash ############################################################## # File Name: check_servicev2.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #1.vars service=$1 #2.check if [ $# -ne 1 ];then echo "use $0 service" exit 1 fi #3.check_running running=`systemctl is-active $1` enable=`systemctl is-enabled $1` if [ "${running}" = "active" -a "${enable}" = "enabled" ];then echo "${service}正在运行" else echo "${service}没有运行,没有开机自启动" fi

3.4. 正则

  • 对变量内容进行匹配,一般用于检查
[[ "$id" =~ ^[0-9]+$ ]]

3.5. 面试题:[] vs [[]]区别

[]

[[]]

无法使用正则

=~可以使用正则

比较大小-eq -ne -gt -ge -lt -le

比较大小== != > >= < <=

逻辑符号 -a -o !

逻辑符号&& || !

4. 各种各样的判断

  • 多分支
  • case语句

4.1. 多分支

if [];then 命令1 elif [];then 命令2 elif [];then 命令3 else 命令4 fi

4.1.1. 案例

  • 案例11:统计根分区磁盘使用率60-70输出警告,70-80输出需要处理,80-95及时处理,95以上立刻处理
1.sh check_disk.sh 2.取出根分区使用率 3.多分支判断

4.2. case语句

  • 类似于多分支判断,一般用来实现菜单选择的功能
case 变量 in start) 命令 ;; stop) 命令 ;; status) 命令 ;; *) echo 错误信息 esac
  • 案例12:判断系统脚本
1.#获取系统名kylin/ubuntu/rocky/centos 2.交给case做判断1
#!/bin/bash ############################################################## # File Name: check_os.sh # Version: V1.0 # Author: zbl # Organization: www.zbl.com # Description: ############################################################## #1.vars source /etc/os-release #2.case case ${ID} in kylin|centos|rocky) echo "当前操作系统为${ID},请使用yum安装软件和rpm检查" ;; ubuntu|debian) echo "当前操作系统为${ID},请使用atp安装软件和dpkg检查" ;; *) echo "未识别的操作系统" exit 1 esac
  • sh/bash 与source / .
sh/bash运行脚本在子shell中创建,涉及到变量,变量仅在子环境生效 source 或 . 运行脚本在当前shell中运行,复制出文件内容,粘贴到当前shell 加载子脚本 加载自定义函数库

5. 总结

  • 文件判断 -f -d -L/-h -s -x
  • 字符串 = != -z -n
  • 逻辑-a -o !
  • 正则 [[]]
  • [] [[]]区别
  • 多分支判断
  • case语句

http://www.jsqmd.com/news/464621/

相关文章:

  • Linux核心文件和系统巡检
  • ansible剧本与变量
  • 基于SpringBoot实现的校园活动管理系统设计与实现
  • AutoDl-较大文件上传最快方法
  • 【redis】redis重新创建集群
  • 【限时免费】 claudecodeui:AI编程助手可视化界面
  • 对学生信息管理系统的改进
  • Shell编程-3
  • WSL端口代理配置全攻略:从零开始实现本地IP访问(附常见问题排查)
  • ansible变量-循环-判断-jinja2模板
  • 5分钟搞定Flink1.19本地部署:用JDK17运行WordCount示例教程
  • 7步掌握 Angular 项目的 Pull Request 评审流程:从提交到合并的完整指南
  • ansible变量-调试-优化
  • docker容器安装与使用
  • 【Gromacs】使用伞形采样研究Her2蛋白聚集的详细操作指南
  • 国产数据库新选择:GBase-8a单机版在Linux下的保姆级安装教程(附常见问题解决)
  • STM32以太网开发实战:DP83848 vs LAN8742选型指南(附CubeMX配置)
  • MATLAB模糊控制器实战:从零搭建智能小费计算系统(附完整代码)
  • Mysql 笔记
  • PyTorch反向传播实战:从计算图到梯度下降的完整代码解析(附可视化训练过程)
  • 从数学推导到代码实现:手把手教你写PyTorch自定义权重初始化
  • 杰理AC701N的板级配置AD的使用
  • Qt信号槽进阶指南:从Qt4到Qt5的信号重载与槽函数优化(避坑大全)
  • 从零到专业:3个AI提示词框架让你工作效率翻倍(含避坑指南)
  • 1为何扣子空间智能体默认不支持短信与邮件发送:技术沙盒、安全合规与插件生态深度解析
  • FPGA开发者的效率神器:3种方法解决Vivado多版本默认启动问题(含拖拽技巧)
  • WinForm程序如何优雅地请求管理员权限?3种方法实测对比(含UAC原理)
  • DIN 75220 标准汽车阳光模拟试验与户外试验对比研究
  • 04. Capture 中 Part Manager 应用场景(二)管理变种 BOM I OrCAD X Capture CIS 设计小诀窍第三季
  • EtherCAT从零到实战:如何用树莓派搭建低成本运动控制原型(附IGH配置指南)