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

day28-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 ];thenecho "use $0 file"exit 1
fi#3.check_link
if [ -L ${file} ];thenecho "${file}是软链接"exit
fi#4.check_file
if [ -f ${file} ];thenif [ -x ${file} ];thenexcu=有执行权限	elif [ -s ${file} ];thensize=文件有内容,非空elseexcu=无执行权限fiecho "${file} 文件存在"echo "${size}"echo "${excu}"exit
fi#5.check_dir
if [ -d ${file} ];thenecho "${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 ];thenecho "use $0 service"exit 1
fi#3.check_running
running=`systemctl is-active $1`
if [ "${running}" = "active" ];thenecho "${service}正在运行"
elseecho "${service}没有运行"
fi#4.check_enable
enable=`systemctl is-enabled $1`
if [ "${enable}" = "enabled" ];thenecho "${service}开机自启动"
elseecho "${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 ];thenecho "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" ];thenecho "${service}正在运行"
elseecho "${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 变量 instart)命令;;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} inkylin|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.xdnf.cn/news/14025.html

相关文章:

  • 动态规划-最长子序列
  • 低熔点纤维市场深度解析:技术革新与产业应用前景
  • 英语写作核心词汇
  • NVIDIA Isaac GR00T N1.5 适用于 LeRobot SO-101 机械臂
  • Python中的函数和方法概要
  • 亚马逊运营中的流量破局与精细化运营路径
  • 【电路】-串并联的应用
  • 独家|阶跃星辰Tech Fellow段楠离职,任京东探索研究院视觉与多模态实验室负责人
  • 【doris】doris集成ranger控制权限,ranger配置无法存储doris密码password信息
  • 什么是分布式锁及分布式锁应用场景
  • GCC编译/连接/优化等选项
  • Solon框架模板漏洞深度剖析与修复实战
  • python格式化字符串的几种方式
  • mysql表备份数据,改表名
  • Ubuntu下使用PyTurboJPEG加速图像编解码
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计流程与要素
  • PDB Bank怎么下载小分子sdf(选择哪个)和复合物
  • Spring依赖注入的四种方式(面)
  • DC3靶机渗透
  • python计算生态库:18个常用标准库+第三方库
  • 杭州电商代运营公司排名前十
  • SPRING AI 入门
  • 前端八股文 - JavaScript 篇
  • UE接口通信常见问题
  • Ubuntu下搭建Black Magic Probe (BMP) 编译环境
  • AbMole| 2-Deoxy-D-glucose(M5140;2-脱氧-D-葡萄糖)
  • 第七章接入技术
  • opencv opencv_contrib vs2020 源码安装
  • 简述Python里面search和match的区别
  • ZooKeeper详解以及应用部署(AI)