(3.1)Linux Shell脚本的自动化编程之条件测试基础

2024-06-08 06:58

本文主要是介绍(3.1)Linux Shell脚本的自动化编程之条件测试基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.shell条件测试
    • 2.文件测试
    • 3.数值比较
    • 4.字符串比较

1.shell条件测试

  • shell条件测试一共就三种:文件测试,数值比较,字符串比较
  • test -d /home 和[ -d /home ]是一样的,注意命令和选项之间要加空格,[ 是个命令
  • 条件测试的用法如下:
格式1:test 条件表达式
格式2(推荐使用):[ 条件表达式 ],单个当括号不支持正则
格式3[[ 条件表达式 ]]
test的具体用法:man test(1)文件测试eg
#!/usr/bin/bash
back_dir=/var
if ! test -d $back_dir;then ## 如果不是一个目录mkdir -p $back_dir
fi执行:bash -vx test.sh----------------------------------------------------------------------------------#!/usr/bin/bash
back_dir=/var
if [ ! -d $back_dir ];then ## 如果不是一个目录mkdir -p $back_dir
fi----------------------------------------------------------------------------------2)数值比较eg
#!/usr/bin/bash
if [ $UID -ne 0 ];thenecho "no 权限!"exit
fiyum -y install httpd----------------------------------------------------------------------------------3)字符串比较
#!/usr/bin/bash
if [ $USER != "root" ];thenecho "no 权限!"exit
fiyum -y install httpd

2.文件测试

  • 具体用法
[ -e dir|file ]		如果 FILE 存在则为真。
[ -d dir ]		如果 FILE 存在且是一个目录则为真。
[ -f file ] 是否存在,而且是文件?
[ -r file ]	当前用户对该文件是否有读权限(除了root用户)
[ -x file ]	如果 FILE 存在且是可执行的则为真。
[ -w file ]	如果 FILE存在且是可写的则为真。
[ -L file ] 是链接文件吗?
[ -b file ] 是设备文件?
[ -c file ] 是字符设备吗?eg:
[ ! -d /cc ] && mkdir /ccc # 目录不存在就创建
[ -d /ccc ] || mkdir /ccc #目录存在就不创建
grep 'cat $1' *   # *代表从所有文件过滤
  • eg:
test -d /home
echo $?
0test -d /home1111
echo $?
1

3.数值比较

  • 具体用法
[ 整数1 操作符 整数2 ][ 1 -gt 10 ] 大于
[ 1 -lt 10 ] 小于
[ 1 -eq 10 ] 等于
[ 1 -ne 10 ] 不等于
[ 1 -ge 10 ] 大于等于
[ 1 -le 10 ] 小于等于
  • C语言风格的比较如下
((1<2));echo $?
((1==2));echo $?
((1>2));echo $?
((1>=2));echo $?
((1<=2));echo $?
((1!=2));echo $?
((`id -u` >0));echo $? #变量执行的结果大于0吗?
(($UID==0));echo $?
  • eg
#!/usr/bin/bash
read -p "Please input a name :" user
# 利用id判断用户是否存在
#id $user &>/dev/null
# if [ $? -eg 0 ]
if id $user &>/dev/null;then #if后面可以跟语句,它只需要判断语句的执行是否为正确echo "user $user exits"
elseuseradd $userif [ $? -eq 0 ];thenecho "user $user is created"fi
fi
  • eg:获取磁盘使用的值
#!/usr/bin/bash
#NF-1指的是:倒数第二列
# awk -F "%"指的是:以百分号进行分割
# 最外面加个反括号``表示取的是值,如果不加,取的就是字符串
disk_use=`df -Th|grep '/$'|awk '{print $(NF-1)}'|awk -F "%" '{print $1}'`##磁盘利用率
mail_user=alice## 查看date的使用   date --help
# %F是年月日
if [ $disk_use -ge 90 ];thenecho "`data +%F-%H` disk: ${disk_use}%"|mail -s "disk war..." $mail_user        ##mail -s:后面跟着邮件主题,接着是接收用户
fi(1)调试执行:bash -vx disk.sh
(2)每隔5分钟执行一下脚本(计划任务,自启动):crontab -e,然后填写:
*/5 * * * *    /bin/bash shell的绝对路径(3)bash -n XXX.sh  检查shell脚本语法
  • eg
#一开始就要删除该文件#!/usr/bin/bash
mem_used=`free -m|grep `^Mem:`|awk '{print $3}'`
mem_total=`free -m|grep '^Mem:'|awk '{print $2}'`
mem_percent=$((mem_used*100/mem_total))
war_file=/tmp/mem_war.txt
rm -rf $war_fileif [ $mem_percent -ge 80 ];thenecho "`date +%F-%H` memory:${mem_percent}%" > $war_file
fiif [ -f $war_file ];thenmail -s "mem war..." alice <$war_filerm -rf $war_file
fi 

4.字符串比较

  • 具体用法:要使用双引号将变量和字符串引起来
[ "$USER" == "root" ];echo $?
0BBB=""
echo ${#BBB}    #表示BBB字符串的长度
0[ -z "$BBB"]  字符串长度是0
echo $?[ -n "$BBB"]			字符串长度不是0
echo $?
1##  -a 表示与    -o表示或    通过 man test可以查
[ 1 -lt 5 -a 5 -gt 10 ];echo $?
1
[ 1 -lt -o 5 -gt 10 ];echo $?
0## [[]]必须用&&和||,[]单个括号用 -a ,-o
[[ 1 -lt 5 && 5 -gt 10 ]];echo $?
1
[[ 1 -lt || 5 -gt 10 ]];echo $?
0
  • eg:用户创建
#!/usr/bin/bash
################################
#useradd						#
#v1.0 by jiwang 2020/1/15		#
###############################read -p "Please input number: " num
read -p "Please input prefix: " prefix
for i in `seq $num`  ## `seq $num`产生一组序列    
douser=$prefix$iuseradd $userecho "123"|passwd --stdin $user &>/dev/nullif [ $? -eq 0 ];thenecho "$user is created"fi
donebash -n use.sh  ##大致检查语法错误
==================================================================================## ^[0-9]+$      +表示前面的字符有1到多个,^开头,$结尾
#!/usr/bin/bash
read -p "Please input number: " num
## num3=123yy
## [[ $num3 =~ ^[0-9]+$ ]];echo $? 表示:num3变量是否匹配后面的正则模式
## 1if [[ ! $num =~ ^[0-9]+$ ]];then  ###后面是正则比较,不要加“”,,~表示匹配。表示:如果不是数字,就echo,echo "no number"exit
fi
read -p "Please input prefix: " prefix
if [ -z "$prefix"];then    ##字符串长度echo "error prefix"exit
fifor i in `seq $num`  ## `seq $num`产生一组序列    
douser=$prefix$iuseradd $userecho "123"|passwd --stdin $user &>/dev/nullif [ $? -eq 0 ];thenecho "$user is created"fi
done

这篇关于(3.1)Linux Shell脚本的自动化编程之条件测试基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041474

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

UE3脚本UnrealScript UC语法点滴

持续更新 目录 类定义修饰符  1.dependson(CLASSNAME) 2.config(ININAME) 3.native 4.notplaceable 5.inherits(CLASSNAME1[,CLASSNAME2,...]) 类对象实例创建 类默认属性设置 变量 1.声明 var local 2.修饰符 config  3.array 类型变量 以及

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1