开发者社区> 摩云飞> 正文

【转载】shell中的条件判断、参数以及变量替换

简介:
+关注继续查看
【test 命令】 
      test 命令是 shell 的内部命令,用于计算作为其参数的表达式是真还是假。 如果表达式为真,则 test 返回0(注意与 C 语言 0 表示 false 不同),如果表达式为假,返回非 0 。 
      shell 提供了另外一个调用 test 命令的方式,就是用方括号 [ ] 来代替单词 test 。 
      调用 test 命令的格式为: 
1
2
test expr1 opr expr2 或是 [ expr1 opr expr2 ]
test opr expr1 或是 [ opr expr1 ]
(注意方括号与表达式之间的空格必须存在) 

【逻辑运算符】 
      -a      expr1 -a expr2      逻辑与 
      -o      expr1 -o expr2      逻辑或 
        !      !expr1                    逻辑非 

【数值判断】 
      -eq      if [ "$a" -eq "$b" ]      是否相等 
     -ne      if [ "$a" -ne "$b" ]      是否不相等 
      -gt       if [ "$a" -gt "$b" ]       是否大于 
      -ge      if [ "$a" -ge "$b" ]      是否大于等于 
      -lt        if [ "$a" -lt "$b" ]        是否小于 
      -le       if [ "$a" -le "$b" ]       是否小于等于

      <         (("$a" < "$b"))       小于(需要双括号) 
      <=      (("$a" <= "$b"))     小于等于(需要双括号) 
      >        (("$a" > "$b"))        大于(需要双括号) 
      >=      (("$a" >= "$b"))     大于等于(需要双括号) 

【字符串判断】 
      =       if [ "$a" = "$b" ]        字符串是否相等 
      !=      if [ "$a" != "$b" ]       字符串是否不等 
      -n      if [ -n str1 ]                字符串长度是否不等于 0 
      -z      if [ -z str2 ]                 字符串长度是否等于 0 
      ==      if [ "$a" == "$b" ]     与 = 等价(但有例外)。 

【文件判断】 
      -b file      若文件存在且是一个块特殊文件
      -c file      若文件存在且是一个字符特殊文件
      -d file      若文件存在且是一个目录
      -e file      若文件存在
      -f file      若文件存在且是一个规则文件(普通文件)
      -g file      若文件存在且设置了SGID位的值
      -h file      若文件存在且为一个符合链接
      -k file      若文件存在且设置了”sticky”位的值
      -p file      若文件存在且为一已命名管道
      -r file      若文件存在且可读
      -s file      若文件存在且其大小大于零
      -u file      若文件存在且设置了SUID位
      -w file      若文件存在且可写
      -x file      若文件存在且可执行
      -o file      若文件存在且被有效用户ID所拥有


【命令行参数/位置变量】 
      $0      脚本的名字 
      $1, $2, ..., $9      脚本第 1 个到第 9 个命令行参数 
      $#      命令行参数的个数 
      $@ 或是 $*      所有命令行参数 
      $?      最后一条命令的退出状态 
      $$      正在执行进程的 ID(PID) 

给位置变量赋值: 
1
2
3
4
[root@Betty ~]# set One Two Tree
[root@Betty ~]# echo $1 $2 $3
One Two Tree
[root@Betty ~]#

【shift 命令】
 
      这条命令可以对位置参数进行移动,每次调用都会导致:$1=$2、$2=$3、$3=$4.... 
      以下代码可以打印出所有的参数 
1
2
3
4
5
while [ -n "$1" ]
do
    echo $1
    shift
done

【变量替换(赋值)】 
      shell 提供了变量替换功能,使用户能够检查变量的值,并根据选项改变它的值。 
      $variable      保存在 variable 中的值 
      ${variable}      保存在 variable 中的值 
      ${variable:-string}      如果 variable 的值非空,则值为 variable,否则值为 string 
      ${variable:+string}      如果 variable 的值非空,则值为 string,否则值为空 
      ${variable:=string}      如果 variable 的值非空,则值为 variable,否则值为 string 且 variable 的值设置为string 
      ${variable:?string}      如果 variable 的值非空,则值为 variable,否则显示 string 并退出 

【正则表达中的特殊字符】 
行末:$       
行首:^ 
空格:\s 

行末空格:\s\+$ 
行首空格:^\+\s 

【注】 
      当在对变量进行判断时最好将变量用双引号括起来,这样可以避免参数包含空格或是 TAB 带来的问题。如 " $HOME"、"$#" 等。 
      使用 [ expr ] 进行判定时,expr与 [ 及 ] 之间均必须有空格。 
       == 的功能在 [[ ]] 和 [] 中的行为是不同的  这个操作符将在 [[ ]] 结构中使用模式匹配  如下: 
[[ $a == z* ]]        # 如果 $a 以 "z" 开头(模式匹配)那么将为 true 

[[ $a == "z*" ]] # 如果 $a 等于 "z*" (字符匹配),那么结果为 true
[ $a == z* ]      # File globbing 和 word splitting 将会发生
[ "$a" == "z*" ] # 如果 $a 等于 z* (字符匹配),那么结果为 true


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
推荐 2 款非常好用的应用 App
推荐 2 款非常好用的应用 App
5 0
推荐 2 款非常好用的应用 App
推荐 2 款非常好用的应用 App
5 0
推荐 2 款非常好用的应用 App
推荐 2 款非常好用的应用 App
6 0
C/C++ - 基本数据类型(默认:32位操作系统)
C/C++ - 基本数据类型(默认:32位操作系统)
4 0
Mac 下 Oh my zsh + iTerm2 初体验
iTerm2是 Terminal 的替代品,也是 iTerm 的继承者。 它适用于 macOS 10.12或更新版本的 mac 电脑。 iTerm2将终端带入了现代社会,带来了一些你从来不知道自己一直想要的功能。
5 0
SpringBoot整合Redis使用教程
Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
9 0
深挖 Redis 6.0 源码—— SDS
SDS(Simple Dynamic Strings, 简单动态字符串)是 Redis 的一种基本数据结构,主要是用于存储字符串和整数。 这篇文章里,我们就来探讨一下 Redis SDS 这种数据结构的底层实现原理。
5 0
飞天加速计划·高校学生在家实践
第一部分 自我介绍 第二部分 阿里云ECS使用攻略 第三部分 收获总结,展望未来
10 0
Java 最常见的 208 道面试题(十八)
Java 最常见的 208 道面试题
7 0
+关注
摩云飞
十年磨一剑,我还差几年~~
266
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载