说实话shell确实有些东西需要学习啊,这不又遇到麻烦了
shell空字符串的判断
if [ $# = 0 ] then echo "The paramters num is 0,return !" return fi if test -z $1 then echo "The length is 0 " return fi
这个是shell的一段脚本,
文件名为t9,测试用 呵呵 随便取的名字
调用方法1:
sh t9
输出 :
The paramters num is 0,return !
没问题
调用方法2:
sh t9 ""
输出:
The length is 0
没问题
调用方法3:
sh t9 " " ##说明,双引号里面有一个空格
输出:
The length is 0
问题出来了,长度为什么是0,不应该是1吗?
真让人纠结,没办法 自己查吧
网上有人呢说shell字符串为空和长度判断的问题
http://blog.163.com/awk_sed/blog/static/202442007201202011135922/
看了下 ,没有说到我的问题,
不过还好,在
if [ "$str" = "" ]
if [ x"$str" = x ]
if [ -z "$str" ]
注意:都要代双引号,否则有些命令会报错,养成好习惯吧!
这一段的时候给了我灵感,”注意:都要带双引号“
是不是双引号的问题,好吧加上双引号试一下
脚本如下
if [ $# = 0 ] then echo "The paramters num is 0,return !" return fi if test -z "$1" then echo "The length is 0 " return fi
唯一的不同是在应用$1的时候添加了双引号,
看下执行结果
直接从调用方法3开始:
sh t9 " " ##说明,双引号里面有一个空格
输出:
The script is not 'yes' ##解释下,这个输出是上面这段脚本下面的脚本上面没有贴出来没关系这足以说明
哈哈 结果出来了,
有点兴奋啊,
等等,为什么会这样?
好吧,下面是我的个人理解。
sh调用的时候会把脚本名(t9)后的都作为参数,
而shell解析的时候
if test -z $1
这一句会先解析成
if test -z '空格'
说明:这个空格打印出来不显示,这里用汉字替代,可以把’空格‘替换为一个空格
但是shell解析的是又有一个问题,
就是基本上可以忽略空格(只保留一个,把所有的空格都看成一个,以后的全部都作为参数)
这个时候就有了问题,比较字符’-z‘后面什么参数都没有,所以一定会报错。
解释完毕
避免办法,字符串比较的时候一定要加上双引号。
相关推荐
一些需要注意的脚本问题 计算字符串长度可用的三种方法: 代码如下: echo “$str”|awk ‘{print length($0)}’ expr length “$str” ... 您可能感兴趣的文章:用Shell判断字符串包含关系的方法小结Shel
在Shell脚本编程中,获取字符串的长度是一个常见的任务,特别是在处理文本数据和进行条件判断时。以下将详细介绍七种不同的方法来计算字符串的长度。 **方法一:利用${#str}来获取字符串的长度** 这是最直接且简单...
使用条件测试,可以利用中括号 [] 或 test 命令来判断条件,例如检查字符串长度是否非空(-n)、文件是否为非空(-s)或字符串是否为空(-z)等。判断文件新旧,可以使用 -nt(新于)和 -ot(旧于)测试。 Shell ...
Shell支持一维数组,数组下标从0开始,使用圆括号定义数组,并通过空格分隔各个元素。例如: ```shell array_name=(value0 value1 value2 value3) ``` 或者 ```shell array_name[0]=value0 array_name[1]=value1 ```...
Shell 测试判断是指使用test或[]来进行判断和测试的命令。例如:test -f $filename && echo "the file is ordinary file" || echo "the file is not ordinary file",可以用来判断文件是否为普通文件。需要注意的是...
- 变量命名遵循特定规则,首字母须为字母,不能有空格、标点符号,也不能使用bash关键字。 - 赋值时不需$符号,例如`your_variable="your,name"`。 - 使用变量时需在变量前加上$,如`echo $your_variable`。 - ...
对于字符串的类型,常见的判断方法包括判断字符串是否只包含数字、字母、字母数字组合、空格或特殊字符等。 在Shell编程中,可以通过多种方式来判断字符串或字符的类型。例如,使用grep命令结合正则表达式匹配数字...
- **文件名规则**:在AIX 5L中,文件名最大长度为255个字符,可以包含字母、数字和部分特殊字符,但不能以`.`开头或包含空格等特定字符。 ### 四、总结 通过上述内容,我们了解了“AIX 5L Korn and bash Shell ...
5. **条件语句和函数**:Awk支持条件判断(`if...else`)和循环(`for`、`while`),还有许多内置函数,如`length()`计算字符串长度,`split()`分割字符串。 6. **数组**:Awk支持关联数组,可以在处理数据时存储和...
Shell还支持数组,数组的元素间以空格分隔。定义数组如`array_name=(value0 value1 value2 value3)`。可以使用索引来访问和操作数组元素。 Shell提供了多种运算符,包括算术运算符(如`expr`命令进行数学计算)、...
在Shell脚本中,参数是以空格分隔的,每个参数被存储在特殊的变量中,如 `$1` 表示第一个参数,`$2` 表示第二个参数,依此类推。如果参数数量超过9个,剩下的参数会被收集到数组变量`$@`或`$*`中。 第一种方法是...
对于数组,可以使用`declare -a array`创建,元素之间用空格分隔,如`array=("hello" "o" "world")`。访问数组元素可以用`${array[index]}`,获取数组长度用`${#array[@]}`。 **expr命令**: `expr`常用于数学运算...
case 语句支持通配符,如 * 任意长度任意字符、? 任意单个字符、[] 指定范围内的任意单个字符、| 或者等。 循环语句 循环语句是 shell 流程控制语句中的一种,用于执行重复的命令或操作。常见的循环语句有 for ...
1. **语法格式**:在方括号的两侧以及`-z`、`-n`等选项两侧都需要加上空格,否则Shell解释器会报错。 2. **变量引用**:确保正确引用变量,如使用`$PATH`而不是`PATH`。 3. **错误处理**:在实际脚本中,可能还需要...
- **自定义变量**:定义变量的基本语法是 `name=value`,注意等号两边不能有空格,并且在使用变量时需要在其前面加上 `$` 符号。 - **逻辑符号**: - `&&`:逻辑与,只有当 cmd1 成功执行后才执行 cmd2。 - `||`...
Linux系统中有多种Shell,例如Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash,最常用)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)以及用于root用户的Shell(/sbin/sh)。...
- Bash/PDKSH中:`abc=9`(等号两边不留空格) - C Shell/TCSH中:`set abc=9` **引用变量**:在变量名前加上`$`符号,如`echo $abc`。 ##### 2.3 位置变量 - 当运行带有多个命令行参数的Shell程序时,这些参数...
Shell脚本是Linux环境下一种强大的工具,它利用shell的命令行解释器来编程执行一系列操作。本讲义主要涵盖了Shell编程中的基本概念和常用命令,包括变量类型、环境变量、位置参数变量、特殊变量、进程状态变量、变量...