欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > shell编程

shell编程

2025/6/14 5:41:02 来源:https://blog.csdn.net/2501_91617137/article/details/148526522  浏览:    关键词:shell编程

表达式

简介:所谓的表达式,就是在场景需求的前提下,判断数据和运算符的操作是否满足需求。

语法格式

 格式
    真实值 操作符 真实值 比较运算符 预期值
示例
    3 + 4 > 6
要点:
    表达式应该具有判断的功能

测试表达式 

     Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0,表示成功,值为其他时,表示失败。
    使用专门的测试工具---test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值0为成立)

测试表达式(test或【】) 

用于条件判断,返回真(0)或返回假(非0)

# 数值比较
[ $a -eq $b ]  # 等于
[ $a -ne $b ]  # 不等于
[ $a -gt $b ]  # 大于
[ $a -lt $b ]  # 小于
[ $a -ge $b ]  # 大于等于
[ $a -le $b ]  # 小于等于

# 字符串比较
[ "$str1" = "$str2" ]   # 等于
[ "$str1" != "$str2" ]  # 不等于
[ -z "$str" ]           # 空字符串
[ -n "$str" ]           # 非空字符串

# 文件测试
[ -e file ]    # 存在
[ -f file ]    # 是普通文件
[ -d file ]    # 是目录
[ -r file ]    # 可读
[ -w file ]    # 可写
[ -x file ]    # 可执行
[ -s file ]    # 非空

 测试表达式

样式1: test 条件表达式
样式2: [ 条件表达式 ]
注意:
    以上两种方法的作用完全一样,后者为常用。
    但后者需要注意方括号[、]与条件表达式之间至少有一个空格。
    test跟 [] 的意思一样
        条件成立,状态返回值是0
        条件不成立,状态返回值是1

简单示例

 

test语法示例
[root@localhost ~]# test 1 == 1
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 1 == 2
[root@localhost ~]# echo $?
1

test -v语法测试变量有没有被设置值,亦可理解为变量是否为空。
[root@localhost ~]# echo $empty

[root@localhost ~]# test -v empty
[root@localhost ~]# echo $?
1
[root@localhost ~]# empty=value
[root@localhost ~]# echo $?
0

 语法示例

[] 语法示例
[root@localhost ~]# [ 1 == 1 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 1 == 12 ]
[root@localhost ~]# echo $?
1

格式解读

 [] 格式解读
[root@localhost ~]# [ 1 == 12]
bash: [: 缺少 `]'
[root@localhost ~]# [ 1 == 12] ]
[root@localhost ~]# echo $?
1

 逻辑表达式

简介

逻辑表达式一般用于判断多个条件之间的依赖关系。
常见的逻辑表达式有:&&  和  ||,根据观察的角度不同含义也不同

语法解读

&&        
    示例:命令1  &&  命令2
        如果命令1执行成功,那么我才执行命令2        -- 夫唱妇随
        如果命令1执行失败,那么命令2也不执行

 ||    
    示例:命令1 || 命令2
        如果命令1执行成功,那么命令2不执行            -- 对着干
        如果命令1执行失败,那么命令2执行

 !
    示例:! 命令
        如果命令执行成功,则整体取反状态

 组合使用方法

使用样式:
    命令1 && 命令2 || 命令3 
        方便理解的样式  ( 命令1 && 命令2 ) || 命令3
功能解读:
    命令1执行成功的情况下,执行命令2
    命令2执行失败的情况下,执行命令3
注意:
    && 必须放到前面,|| 放到后面

 简单实践

实践1-语法实践

&& 语法实践
[root@localhost ~]# [ 1 = 1 ] && echo "条件成立"
条件成立
[root@localhost ~]# [ 1 = 2 ] && echo "条件成立"

|| 语法实践
[root@localhost ~]# [ 1 = 2 ] || echo "条件不成立"
条件不成立
[root@localhost ~]# [ 1 = 1 ] || echo "条件不成立"
[root@localhost ~]#

 实践2-案例实践

执行文件前保证具备执行权限
[root@localhost ~]#cat test_argumn.sh

#!/bin/bash

#&& 和 || 演示

#设定普通量

arg_num=$#

[ $# == 1 ] && echo "脚本参数为1,允许执行脚本"
[ $# == 1 ] || echo "脚本参数不为1,不允许执行脚本"

脚本执行后效果
[root@localhost ~]#/bin/bash test_argnum.sh

脚本参数不为1,不允许执行脚本

[root@localhost ~]#  /bin/bash test_argnum.sh 1

脚本参数为1,允许执行脚本
[root@localhost ~]# /bin/bash test_argnum.sh 1 2
脚本参数不为1,不允许执行脚本

实践3-取反

 查看正常的字符串判断
[root@localhost ~]# [ aaa == aaa ]
[root@localhost ~]# echo $?
0

查看取反的效果判断
[root@localhost ~]# [ ! aaa == aaa ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ ! aaa == bbb ]
[root@localhost ~]# echo $?
0

 实践4-组合使用

[root@localhost ~]# [ -d /etc ] && echo "目录存在" || echo "目录不存在"
目录存在
[root@localhost ~]# [ -d /etc1 ] && echo "目录存在" || echo "目录不存在"
目录不存在

 实践5- 主机网络连通测试

查看脚本内容
[root@localhost ~]# cat host_network_test.sh
#!/bin/bash
# 功能:测试主机网络连通性
# 版本:v0.1
# 作者:书记
# 联系:www.superopsmsb.com

# 定制普通变量
host_addr="$1"

# 脚本基本判断
[ -z ${host_addr} ] && echo "请输入待测试主机ip" && exit
[ $# -ne 1 ] && echo "请保证输入1个脚本参数" && exit

# 测试主机网络
net_status=$(ping -c1 -w1 ${host_addr} >/dev/null 2>&1 && echo "正常" || echo "异常")

# 信息输出
echo -e "\e[31m\t主机网络状态信息\e[0m"
echo -e "\e[32m================================"
echo "${host_addr} 网络状态: ${net_status}"
echo -e "================================\e[0m"

脚本执行效果

[root@localhost ~]# /bin/bash host_network_test.sh

请输入待测试主机ip

[root@localhost ~]# /bin/bash host_network_test.sh aa bb 

请保证输入1个脚本参数

[root@localhost ~]# /bin/bash host_network_test.sh 10.0.0.12
        主机网络状态信息
================================
10.0.0.12 网络状态: 正常
================================
[root@localhost ~]# /bin/bash host_network_test.sh 10.0.0.15
        主机网络状态信息
================================
10.0.0.15 网络状态: 异常
================================

 字符串表达式

简介:    所谓的字符串表达式,主要是判断 比较运算符 两侧的值的内容是否一致,由于bash属于弱类型语言,所以,默认情况下,无论数字和字符,都会可以被当成字符串进行判断。

 符号解读

内容比较判断
    str1 == str2            str1和str2字符串内容一致
    str1 != str2            str1和str2字符串内容不一致,!表示相反的意思

内容空值判断
    -z     str                    空值判断,获取字符串长度,长度为0,返回True
    -n  "str"                非空值判断,获取字符串长度,长度不为0,返回True
                            注意:str外侧必须携带"",否则无法判断

 简单实践

实践1-内容比较判断

判断字符串内容是否一致
[root@localhost ~]# test aaa == bbb

[root@localhost ~]# echo &?

1

[root@localhost ~]# test aaa != bbb
[root@localhost ~]# echo $?
0

判断数字内容是否一致
[root@localhost ~]# num1=234 num2=456
[root@localhost ~]# test $num1 == $num2
[root@localhost ~]# echo $?
1
[root@localhost ~]# test $num1 != $num2
[root@localhost ~]# echo $?
0

 实践2-空值判断

判断内容是否为空
[root@localhost ~]# string=nihao
[root@localhost ~]# test -z $string
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -z $string1
[root@localhost ~]# echo $?
0

判断内容是否为不空,可以理解为变量是否被设置
[root@localhost ~]# unset str
[root@localhost ~]# [ -n $str ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -n "$str" ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# str=value
[root@localhost ~]# [ -n "$str" ]
[root@localhost ~]# echo $?
0

 实践3-脚本实践

查看脚本内容

[root@localhost ~]# cat simple_login_string.sh
#!/bin/bash
# 功能: 模拟shell登录
# 版本:v0.1
# 作者:书记
# 联系:www.superopsmsb.com

# 定制命令变量
HOSTNAME=$(hostname)

# 清屏
clear

# 输出提示信息
echo "---------------------------------"
# 交互输入登陆信息
read -p "请输入用户名:" account
[ -z $account ] && read -p "请输入用户名:" account
read -s -t30 -p "请输入登录密码:" password
echo
echo "---------------------------------"
# 输出用户输入信息
[ $account == 'root' ] && [ $password == '123456' ] && echo "登录成功" || echo "登录失败"

 脚本执行测试
[root@localhost ~]# /bin/bash simple_login_string.sh
---------------------------------
请输入用户名:root
请输入登录密码:
---------------------------------
登录成功
[root@localhost ~]# /bin/bash simple_login_string.sh
CentOS Linux release 7.9.2009 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
---------------------------------
请输入用户名:
请输入用户名:root1
请输入登录密码:
---------------------------------
登录失败
[root@localhost ~]#****

 

 

 

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词