Shell高级编程7:Shell的字符串表达式介绍

字符串测试操作符

  字符串测试操作符的作用:比较两个字符串是否相同、字符串长度是否为0,字符串是否为 NULL(注:bash区分零长度字符串和空字符串)等
  在书写测试表达式时,可以使用下表中的字符串测试操作符。

下表:字符串测试操作符

常用字符串测试操作符 两端
-z 若串长度为0则真,-z可以理解为zero
-n 若串长度不为0则真,-z可以理解为no zero
"串1" = "串2" 若串1等于串2则真,可使用"=="代替"="
"串1" != "串2" 若串1不等于串2则真

特别注意,以上表格中的字符串测试操作符务必要用""引起来

1、以上表格中的字符串测试操作符号务必要用""引起来

2、比较符号两端有空格

字符串测试操作符提示:

-n 比较字符串长度是否不为0,如果不为0则为真,如:[ -n "$myvar" ]

-z 比较字符串长度是否等于0,如果等于0则为真,如:[ -z "$myvar" ]

特别注意,对以上表格中的字符串测试操作符号,如[ -n "$myvar" ],要把字符串用‘‘引起来

注意事项:

1、字符串或字符串变量比较都要加双引号之后再比较

2、字符串或字符串变量比较,比较符号两端最好都有空格,学习shell多参考系统脚本

  "="比较两个字符串是否相同,与"=="等价,如[ "$a" = "$b" ],其中$a这样的变量最好用""括起来,因为如果中间有空格,*等符号就可能出错了,当然更好的方法就是[ "${a}" = "${b}" ]

  "!="比较两个字符串是否相同,不同则为"是"

[[email protected] ~]# sed -n ‘30,31p‘ /etc/init.d/network
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 6
错误例子:https://blog.51cto.com/oldboy/1433688

例子演示

[root@node1 ~]# [ -n "abc" ] && echo 1 || echo 0
1
[root@node1 ~]# [ -n "" ] && echo 1 || echo 0
0
[root@node1 ~]# [ -z "abcdef" ] && echo 1 || echo 0
0
[root@node1 ~]# [ ! -z "abcdef" ] && echo 1 || echo 0
1
[root@node1 ~]# [ -n "abcdef" ] && echo 1 || echo 0
1
[root@node1 ~]# test="chenxi"
[root@node1 ~]# [ -n "$test" ] && echo 1 || echo 0
1
[root@node1 ~]# [ -n $test ] && echo 1 || echo 0
1
[root@node1 ~]# [ -z $test ] && echo 1 || echo 0
0
[root@node1 ~]# [ $test = chenxi ] && echo 1 || echo 0
1
[root@node1 ~]# [ "$test" = "chenxi" ] && echo 1 || echo 0
1
[root@node1 ~]# [ "$test"="chenxi" ] && echo 1 || echo 0
1
[root@node1 ~]# [ $test=chenxi ] && echo 1 || echo 0
1

等号两端空格带来的问题

[root@node1 ~]# [ "abc"="1" ] && echo 1 || echo 0
1
[root@node1 ~]# [ "abc" = "1" ] && echo 1 || echo 0
0

注意:字符测试表达式中变量 要加双引号,以免判断时出错,导致结果错误

不加引号

[root@node1 ~]# [ $test = abc ] && echo 1 || echo 0
-bash: [: =: unary operator expected
0
[root@node1 ~]# [ $test = "abc" ] && echo 1 || echo 0
-bash: [: =: unary operator expected
0
[root@node1 ~]# [ "$test" = "abc" ] && echo 1 || echo 0
0

范例:系统脚本/etc/init.d/nfs字符串测试的应用(若没有该文件,则安装nfs-utils包)

[root@node1 init.d]# sed -n ‘86,90p‘ /etc/init.d/nfs
        # Load the nfsd module so /proc/fs/nfsd will exist
        [ "$NFSD_MODULE" != "noload" -a -x /sbin/modprobe ] && {
                /sbin/modprobe nfsd
                [ -n "$RDMA_PORT" ] && /sbin/modprobe svcrdma
        }

原文地址:https://www.cnblogs.com/chenyuxi1314/p/11438398.html

时间: 2024-08-06 16:29:17

Shell高级编程7:Shell的字符串表达式介绍的相关文章

Linux Shell 高级编程技巧3----运行级别脚本介绍

3.运行级别脚本介绍    3.1.运行级别        运行级别介绍:            0    关机            1    单用户模式            2    多用户模式,没有NFS服务            3    多用户模式            4    目前还没有使用            5    X windows 的启动模式            6    重启计算机        运行级别对应的目录(/etc/rcN.d,N是数字0.1.2...)

18道Shell高级编程企业实战题及参考答案(一)

Shell高级编程企业实战题参考解答 ########################################################################### 让我们一起感谢,本文内容答案完全来自老男孩教育的学生-张耀课前上机考试解答! ########################################################################### 目录: 1.监控MySQL主从同步... 1 2.批量创建文件及改名... 3

shell高级编程

条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else条件为假的分支代码 fi 多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else以上条件都为假的分支代码 fi 逐个条件进行判断,第一次遇为"真"条件时,执行其分支,而后结束整个if语 句 If

shell高级编程企业实战题编程---是骡子是马 牵出来溜溜!

企业合格的linux运维必会编程题,能独立完成的同学就业工资不会低于10K 这是老男孩linux运维班要求学生必会的题目,完不成的不能合格毕业,每个完成的都奖励价值500-1000元的等值礼物(以当天考试成绩宣布为准),要进要退自己抉择,伙伴们走起! 实战考试时间就在2015年4月15日上机实战,禁止大面积抄袭学习课堂笔记否则无奖励!共18道考试题,面授上课几乎全部讲解过类似的案例,考试题略微变更而已. 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件

Linux Shell 高级编程技巧4----几个常用的shell脚本例子

4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash current_PID=$$ ps -aux | grep "/usr/sbin/httpd" | grep -v "grep" | awk '{print $2}' > /tmp/${current_PID}.txt for pid in `cat /tmp/${

Linux Shell 高级编程技巧2----shell工具

2.shell工具    2.1.日志文件        简介            创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日志文件        常用的日志文件的方法            以时间为标识的日志文件                例子 #!/bin/bash #当前的日期 current_date=`date "+%Y%m%d"` #今天的日志文件名 todaylog="log/${cu

Shell的字符串表达式介绍-实践及企业案例脚本剖析

man test可以看到字符串  -n STRING               the length of STRING is nonzero        STRING equivalent to -n STRING        -z STRING               the length of STRING is zero        STRING1 = STRING2               the strings are equal        STRING1 != 

Linux Shell 高级编程技巧1---深入讨论(awk、<<)

1.深入讨论(awk.<<)    1.1.深入讨论awk        记录和域,模式和动作,正则表达式和元字符            基础教程中已经介绍        条件和逻辑操作符            <    小于            >=    大于等于            <=    小于等于            ==    等于            !=    不等于            ~    匹配正则表达式            !~    

shell高级编程三剑客之sed实践讲解

功能说明: sed stream editor(流编辑)增删改查  过滤,取行 sed --version查看sed版本 man sed 语法格式: sed    [options]    [sed-commands]     [input-file]           (sed语句) sed  选项                sed命令               输入文件 sed命令可以是多个或则是一个, [input-file] 输入文件可以是真实存在的文件也可以通过管道  可以是文