第三章 shell条件测试

这篇具有很好参考价值的文章主要介绍了第三章 shell条件测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.1. 用途

1.2. 基本语法

1.2.1. 格式:

1.2.2. 示例

1.3. 文件测试

1.3.1. 参数:

1.3.2. 示例

1.4. 整数测试

1.4.1. 作用

1.4.2. 操作符

1.4.3. 示例

1.5. 逻辑操作符

1.5.1. 符号

1.5.2. 例:

1.6. 命令分隔符

1.7. 案例分析


1.1. 用途

为了能够正确处理Shell程序运行过程中遇到的各种情况,Linux Shell提供了一组测试运算符。

通过这些运算符,Shell程序能够判断某种或者几个条件是否成立。

条件测试在各种流程控制语句,例如判断语句和循环语句中发挥了重要的作用,所以了解和掌握这些条件测试是非常重要的

1.2. 基本语法

1.2.1. 格式:

格式1: test -参数 条件表达式
格式2: [ 条件表达式 ] # 注意:[]的左右要有空格
格式3: [[ 条件表达式 ]] # 注意:[]的左右要有空格
格式4: ((条件表达式))

test单独使用,判断条件为真,echo $?返回0,假返回1

test[ ]等价

[[ ]] 是扩展命令,可以使用通配符等进行模式匹配,&& || > < 等操作符可以直接应用于双中括号中,但不能用于单中括号中

(()) 一般用于if语句里,两端不需要有空格,测试对象为整数

1.2.2. 示例

# test语法
[root@server ~]# test -f /etc/passwd
[root@server ~]# echo $?
0
[root@server ~]# test -f /etc/aa
[root@server ~]# echo $?
1
[root@server ~]#
[root@server ~]# test -f /etc/passwd && echo 1 || echo 0
1
[root@server ~]# test -f /etc/aa && echo 1 || echo 0
0
[root@server ~]# test -f /etc/passwd && echo yes || echo no
yes
[root@server ~]# test -f /etc/aa && echo yes || echo no
no
[root@server ~]# if test -f /etc/passwd ; then echo 1 ; else echo no ;fi
1
[root@server ~]# if test -f /etc/aa ; then echo 1 ; else echo no ;fi
no
# [] 语法
[root@server ~]# [-f /etc/passwd] # 注意:[] 中要有空格
bash: [-f: command not found...
[root@server ~]# [ -f /etc/passwd ]
[root@server ~]# echo $?
0
[root@server ~]# [ -f /etc/aa ]
[root@server ~]# echo $?
1
[root@server ~]# [ -f /etc/aa ] && echo y || echo n
n
[root@server ~]# [ -f /etc/passwd ] && echo y || echo n
y
[root@server ~]# if [ -f /etc/passwd ] ; then echo 1 ; else echo no ;fi
1
[root@server ~]# if [ -f /etc/aa ] ; then echo 1 ; else echo no ;fi
no
# [[]] 语法
[root@server ~]# [[ 3 > 2 || 1 > 2 ]] && echo 1 || echo 0
1
[root@server ~]# [[ 3 > 2 && 1 > 2 ]] && echo 1 || echo 0
0
(()) 语法
[root@server ~]# ((9>5)) && echo 1 || echo 0
1
[root@server ~]# (( 9 > 5 )) && echo 1 || echo 0
1
[root@server ~]# ((9>5)) && echo 1 || echo 0
1
[root@server ~]# ((9>13)) && echo 1 || echo 0
0

[root@server ~]# ((9>13.5)) && echo 1 || echo 0 # 注意:不支持小数运算
-bash: ((: 9>13.5:语法错误: 无效的算术运算符 (错误符号是 ".5")
0

1.3. 文件测试

1.3.1. 参数:

第三章 shell条件测试,shell脚本编程,chrome,前端,运维

1.3.2. 示例

[root@server ~]# [ -d /root ] && echo y || echo n
y
[root@server ~]# [ -d /aa ] && echo y || echo n
n
[root@server ~]# [ -b /dev/nvme0n1 ] && echo y || echo n
y
[root@server ~]# [ -L /dev/cdrom ] && echo y || echo n
y
[root@server ~]# ll /dev/cdrom
lrwxrwxrwx 1 root root 3 3月 22 11:31 /dev/cdrom -> sr0
[root@server ~]# [ -e /file1 ] && echo y || echo n
n
[root@server ~]# touch /file1
[root@server ~]# [ -e /file1 ] && echo y || echo n
y
# 编写脚本,测试文件是否存在,不存在则创建
[root@server ~]# vim temp1.sh

#!/bin/bash

FILE=$1
echo FILE

if test -e $FILE
then
    echo "$FILE文件已存在"
else
    echo "$FILE文件不存在,开始新建..."
    touch $FILE
    ls -l $FILE
fi

[root@server ~]# bash temp1.sh /etc/passwd
/etc/passwd
/etc/passwd文件已存在
[root@server ~]# bash temp1.sh temp
temp
temp文件不存在,开始新建...
-rw-r--r-- 1 root root 0 6月 17 14:53 temp
# 上例改写
[root@server ~]# vim temp1.sh

#!/bin/bash

read -p "请输入文件名: " FILE

if test -e $FILE
then
    echo "$FILE文件已存在"
else
    echo "$FILE文件不存在,开始新建..."
    touch $FILE
    ls -l $FILE
fi

[root@server ~]# bash temp1.sh
请输入文件名: /etc/sos/sos.conf
/etc/sos/sos.conf文件已存在
[root@server ~]# bash temp1.sh
请输入文件名: t1
t1文件不存在,开始新建...
-rw-r--r-- 1 root root 0 6月 17 14:56 t1

1.4. 整数测试

1.4.1. 作用

用于比较两个数值的大小关系,操作的对象是数值

1.4.2. 操作符

第三章 shell条件测试,shell脚本编程,chrome,前端,运维

1.4.3. 示例

[root@server ~]# [ 5 -gt 3 ] && echo y || echo n 
y
[root@server ~]# test 5 -gt 3 && echo y || echo n
y
[root@server ~]# ((5>3)) && echo y || echo 0
y
# 知识拓展
# 检查左侧内容是否包含右侧的表达式,可以使用 =~ 正则匹配,表示是否包含
[root@server ~]# n=123
[root@server ~]# [[ "$n" =~ ^[0-9]+$ ]] && echo y || echo n
y
[root@server ~]# n=123ttt
[root@server ~]# [[ "$n" =~ ^[0-9]+$ ]] && echo y || echo n
n

1.5. 逻辑操作符

1.5.1. 符号

第三章 shell条件测试,shell脚本编程,chrome,前端,运维

1.5.2. 例:

[root@server ~]# [ -f /etc/passwd -a -f /etc/services ] && echo 1 || echo 0
1
[root@server ~]# [ -f /etc/hosts -o -d /etc/services ] && echo 1 || echo 0
1
[root@server ~]# ((5<10 && 5>2)) && echo y || echo n
y
[root@server ~]# ((2<5<10)) && echo y || echo n
y
[root@server ~]# ((2<5<1)) && echo y || echo n
n
[root@server ~]# ((6<5<10)) && echo y || echo n
y
[root@server ~]# ((2<5<-1)) && echo y || echo n
n

1.6. 命令分隔符

cmd1;cmd2 以独立的进程依次执行cmd1和cmd2
(cmd1;cmd2) 在同一进程中依次执行cmd1和cmd2
cmd1&cmd2 cmd1和cmd2同时执行,分属于不同的进程
cmd1&&cmd2 当cmd1为真时,则执行cmd2
cmd1||cmd2 当cmd1不为真时,则执行cmd2
cmd& 后台执行
# 若账户fox10不存在,则添加账户
[root@server ~]# id fox10 &> /dev/null && echo "fox10已存在" || useradd
fox10

# &> /dev/null 表示将左侧命令执行的正确和错误输出到“黑洞”即不显示到屏幕

1.7. 案例分析

例1:判断当前已登录账户数,若超过5个则输出“Too many”

[root@server ~]# num=$(who | cut -d " " -f1 | sort -u | wc -l)
[root@server ~]# [ $num -gt 5 ] && echo "Too many" || echo "已登录账户数:$num"已登录账户数:1

# who : 查看当前已登录的账户信息

# cut -d " " -f1 :以空格为列向分割符,截取第1部分

# sort -u :去重后排序

# wc -l:计算行数

# 上例改写为:
[root@server ~]# (($num>5)) && echo "Too many" || echo "已登录账户数:$num"

例2:编写脚本temp2.sh ,程序从键盘读入一个目录名,判断该命令是否存在,若不存在则创建,并显示目录信息

[root@server ~]# vim temp2.sh
#!/bin/bash

cd /

ls
read -p "请输入一个目录名:" dir
test -d $dir && ls -l $dir || (echo "目录不存在,开始新建..." ; mkdir $dir ;
ls -l $dir)

例3:如果/var/log/messages文件行数大于30行,则显示提示信息

[root@server ~]# (($(cat /var/log/messages | wc -l)>30)) && echo "好大一个文件" ||
echo "还能接受"

例4:编写脚本temp3.sh,功能:显示root目录下的文件信息,之后建立一个aa目录,在aa目录下新建一 个文件bb.txt,并修改该文件的权限为可执行,最后再次浏览信息

[root@server ~]# vim temp3.sh

#!/bin/bash

ls -l /root

mkdir /root/aa

touch /root/aa/bb.txt

chmod +x /root/aa/bb.txt

ls -l /root

例5:编写脚本temp4.sh,从键盘读入x,y,计算和值后输出

#!/bin/bash

#从键盘输入2个整数存储到变量x,y中,计算和值后输出

read -p  "请输入x的值" x
read -p  "请输入y的值" y


if [ -n "$x" -a -n "$y" ]
then
        if [[ "$x"  =~  ^[0-9]+$ ]] && [[ "$y" =~ [0-9]+$ ]]
        then
                sum=$[x+y]
                echo "$x+$y=$sum"
        else
                echo "请输入数字"
        fi
else
        echo "请输入有效内容"
fi

第三章 shell条件测试,shell脚本编程,chrome,前端,运维

第三章 shell条件测试,shell脚本编程,chrome,前端,运维

例6:编写temp5.sh脚本显示所有用户,选择一个用户输入,判断是root账户还是系统账户还是普通账户

#!/bin/bash 

#显示所有账户名称,从键盘输入账户名称,判断是系统账户还是普通账户

echo "系统中所有账户名称如下"
cat /etc/passwd | cut -d ":" -f1 | sort

read -p "请输入一个账户名称:" us

[ $(id -u $us) -lt 1000 ] && echo "系统账户" || echo ”普通账户“

第三章 shell条件测试,shell脚本编程,chrome,前端,运维

或者

[root@server ~]# vim temp5.sh

#!/bin/bash

cat /etc/passwd | cut -d ":" -f1 | sort -u

read -p "请输入一个账户名:" us

us_num=$(id -u $us)

if (($us_num==0))
    
then
    echo "此用户为管理员账户"
else
    if (($us_num>=1 && $us_num<=999))
    then
    echo "此账户为系统账户"
    else
        echo "普通账户"
    fi
fi

例7:编写脚本temp6.sh ,给定文件anaconda-ks.cfg,判断是否存在空白行,若存在则显示行数,否则显示“无空白行”提示信息

#!/bin/bash

#检测anaconda-ks.cfg文件中是否有空白行,若有则显示行数

num=$(grep ^$ /root/anaconda-ks.cfg | wc -l)

if [ $num -gt 0 ]
then
        echo "该文件含有空白行,行数渭:$num"
        grep -n ^$ /root/anaconda-ks.cfg
else
        echo"此文件无空白行"
fi

第三章 shell条件测试,shell脚本编程,chrome,前端,运维

第三章 shell条件测试,shell脚本编程,chrome,前端,运维文章来源地址https://www.toymoban.com/news/detail-832633.html

到了这里,关于第三章 shell条件测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell编程之存储读写测试实战脚本

    Shell编程是一种在命令行环境中编写程序的技术,常用于Linux和Unix系统。它主要使用Shell脚本语言来编写程序。Shell编程常用于系统管理、自动化任务、批处理等领域。 常用的Shell脚本语言包括Bash、Csh、Tcsh和Zsh等。Bash是最常用的Shell编程语言,它是大多数Linux和Unix系统的默认

    2024年02月12日
    浏览(44)
  • 移动开发技术_微信小程序_第三章测试

    作答记录 1 【单选题】下列关于小程序生命周期函数说法不正确的是( )。(5.0分) A、 分为应用生命周期函数和页面生命周期函数两种 B、 在onLoad生命周期函数中可以获得地址中的参数 C、 onLaunch生命周期函数是小程序初始化完成时触发 D、 onLaunch 生命周期函数会被重复执

    2024年02月09日
    浏览(38)
  • 【Shell编程练习】编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态

    输出Hello World 通过位置变量创建 Linux 系统账户及密码 监控内存和磁盘容量,小于给定值时报警 猜大小 输入三个数并进行升序排序 要测试一个主机是否处于开机状态可以使用ping命令。 ping命令 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应

    2024年01月16日
    浏览(51)
  • 【零基础 STM32通过CAN通信驱动Maxon电机】第三章 STM32 CAN通信回环模式测试及Maxon电机通信

    第三章 STM32 CAN通信回环模式测试及Maxon电机通信 正点原子官方给的CAN通信例程需要lcd显示屏和两块板子,本章修改代码,仅用一块STM32进行回环模式的测试。 首先下载修改后的程序,运行并烧录(接线方式和运行方式与上一章完全相同)。注意板子右侧的接线帽要接正确,

    2024年01月21日
    浏览(43)
  • Shell脚本编程实践——第3关:使用Shell脚本创建文件目录

    任务描述 本关任务:设计一个Shell程序,在/home目录下建立一个userdata目录,在userdata目录下再建立5个目录,即user1~user5,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 相关知识 为了完成

    2023年04月22日
    浏览(46)
  • Linux 系统shell脚本编程笔记——脚本入门

    目录 1、创建shell脚本文件  2、显示消息 3、 环境变量 4、用户变量 5、命令替换 ​编辑  6、重定向输入与输出 6.1、输出重定向  6.2、输入重定向 ​编辑 7、执行数学运算 7.1、expr命令 7.2、bc的基本用法  8、退出脚本 完整笔记请前往此处获取:https://download.csdn.net/download/qq

    2024年02月06日
    浏览(69)
  • Shell脚本编程进阶

    Shell脚本编程进阶 定义 for循环中LIST列表的生成方式 (1) 直接给出列表 (2) 整数列表: (3) 使用可以返回列表的命令 (4) 使用glob,如:*.sh (5) 变量引用 for特殊格式定义及使用 while循环定义 continue [N]:提前结束第N层的 本轮循环 ,而直接进入下一轮判断;最内层为第1层 break [N]:提

    2024年02月14日
    浏览(45)
  • Shell脚本编程

    视频地址https://www.bilibili.com/video/BV1hW41167NW/?p=1vd_source=977d52a6b92ce8b6ae67c16fc61f0428 第一章 Shell概述 大数据程序员为什么要学习Shell呢? 需要看懂运维人员编写的Shell程序 偶尔会编写一些简单的Shell程序来管理集群,提高开发效率。 Shell概述 Shell是一个命令行解释器,它接收应用程

    2024年02月04日
    浏览(47)
  • Linux第三章

    无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。在Linux系统中,拥有最大权限的账户名为:root(超级管理员) root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的(普通用户的权限,一般在其HOME目录内是不受限的,一旦出了HOME目录,大

    2023年04月26日
    浏览(55)
  • 第三章-上网行为安全

    1)宽带滥用 2)上网难监管 3)信息泄露 4)网络违法 5)安全威胁 1)上网行为三要素:用户、流量、行为 2)功能需求 (AC的功能)-- 重点 用户认证 应用控制 网页过滤 行为审计 流量管理 应用选路 互联网上网行为管控 一体化网关 无线Wi-Fi管控营销 无线防共享上网 全网上

    2024年01月23日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包