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 ];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语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱包林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值