1、传递参数

可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:

  1. #!/bin/bash
  2.  
  3. echo "Shell 传递参数实例!";
  4. echo "执行的文件名:$0";
  5. echo "第一个参数为:$1";
  6. echo "第二个参数为:$2";
  7. echo "第三个参数为:$3";

为脚本设置可执行权限,并执行脚本,输出结果如下所示:

另外,还有几个特殊字符用来处理参数:

  1. #!/bin/bash
  2.  
  3. echo "Shell 传递参数实例!";
  4. echo "第一个参数为:$1";
  5.  
  6. echo "参数个数为:$#";
  7. echo "传递的参数作为一个字符串显示:$*";

$* 与 $@ 区别:

相同点:都是引用所有参数。

不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

  1. #!/bin/bash
  2.  
  3. echo "-- \$* 演示 ---"
  4. for i in "$*"; do
  5. echo $i
  6. done
  7.  
  8. echo "-- \$@ 演示 ---"
  9. for i in "$@"; do
  10. echo $i
  11. done

2、运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

  1. 算数运算符
  2. 关系运算符
  3. 布尔运算符
  4. 字符串运算符
  5. 文件测试运算符

原生bash不支持简单的数学运算

但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

  1. #!/bin/bash
  2.  
  3. val=` + `
  4. echo "两数之和为 : $val"

结果:

两点注意:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

2.1 基本运算符

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

举例:

  1. #!/bin/bash
  2.  
  3. a=
  4. b=
  5.  
  6. val=`expr $a + $b`
  7. echo "a + b : $val"
  8.  
  9. val=`expr $a - $b`
  10. echo "a - b : $val"
  11.  
  12. val=`expr $a \* $b`
  13. echo "a * b : $val"
  14.  
  15. val=`expr $b / $a`
  16. echo "b / a : $val"
  17.  
  18. val=`expr $b % $a`
  19. echo "b % a : $val"
  20.  
  21. if [ $a == $b ]
  22. then
  23. echo "a 等于 b"
  24. fi
  25. if [ $a != $b ]
  26. then
  27. echo "a 不等于 b"
  28. fi

运行结果:

注意:

  • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
  • 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 。

2.2 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

假定变量 a 为 10,变量 b 为 20:

举例:

  1. a=
  2. b=
  3.  
  4. if [ $a -eq $b ]
  5. then
  6. echo "$a -eq $b : a 等于 b"
  7. else
  8. echo "$a -eq $b: a 不等于 b"
  9. fi
  10. if [ $a -ne $b ]
  11. then
  12. echo "$a -ne $b: a 不等于 b"
  13. else
  14. echo "$a -ne $b : a 等于 b"
  15. fi
  16. if [ $a -gt $b ]
  17. then
  18. echo "$a -gt $b: a 大于 b"
  19. else
  20. echo "$a -gt $b: a 不大于 b"
  21. fi
  22. if [ $a -lt $b ]
  23. then
  24. echo "$a -lt $b: a 小于 b"
  25. else
  26. echo "$a -lt $b: a 不小于 b"
  27. fi
  28. if [ $a -ge $b ]
  29. then
  30. echo "$a -ge $b: a 大于或等于 b"
  31. else
  32. echo "$a -ge $b: a 小于 b"
  33. fi
  34. if [ $a -le $b ]
  35. then
  36. echo "$a -le $b: a 小于或等于 b"
  37. else
  38. echo "$a -le $b: a 大于 b"
  39. fi

2.3 布尔运算符

假定变量 a 为 10,变量 b 为 20:

举例:

  1. #!/bin/bash
  2.  
  3. a=
  4. b=
  5.  
  6. if [ $a != $b ]
  7. then
  8. echo "$a != $b : a 不等于 b"
  9. else
  10. echo "$a != $b: a 等于 b"
  11. fi
  12. -a $b -gt ]
  13. then
  14. echo "$a 小于 100 且 $b 大于 15 : 返回 true"
  15. else
  16. echo "$a 小于 100 且 $b 大于 15 : 返回 false"
  17. fi
  18. -o $b -gt ]
  19. then
  20. echo "$a 小于 100 或 $b 大于 100 : 返回 true"
  21. else
  22. echo "$a 小于 100 或 $b 大于 100 : 返回 false"
  23. fi
  24. -o $b -gt ]
  25. then
  26. echo "$a 小于 5 或 $b 大于 100 : 返回 true"
  27. else
  28. echo "$a 小于 5 或 $b 大于 100 : 返回 false"
  29. fi

2.4 逻辑运算符

假定变量 a 为 10,变量 b 为 20:

举例:

  1. #!/bin/bash
  2.  
  3. a=10
  4. b=20
  5.  
  6. if [[ $a -lt 100 && $b -gt 100 ]]
  7. then
  8. echo "返回 true"
  9. else
  10. echo "返回 false"
  11. fi
  12.  
  13. if [[ $a -lt 100 || $b -gt 100 ]]
  14. then
  15. echo "返回 true"
  16. else
  17. echo "返回 false"
  18. fi

2.5 字符串运算符

假定变量 a 为 "abc",变量 b 为 "efg":

举例:

  1. #!/bin/bash
  2.  
  3. a="abc"
  4. b="efg"
  5.  
  6. if [ $a = $b ]
  7. then
  8. echo "$a = $b : a 等于 b"
  9. else
  10. echo "$a = $b: a 不等于 b"
  11. fi
  12. if [ $a != $b ]
  13. then
  14. echo "$a != $b : a 不等于 b"
  15. else
  16. echo "$a != $b: a 等于 b"
  17. fi
  18. if [ -z $a ]
  19. then
  20. echo "-z $a : 字符串长度为 0"
  21. else
  22. echo "-z $a : 字符串长度不为 0"
  23. fi
  24. if [ -n "$a" ]
  25. then
  26. echo "-n $a : 字符串长度不为 0"
  27. else
  28. echo "-n $a : 字符串长度为 0"
  29. fi
  30. if [ $a ]
  31. then
  32. echo "$a : 字符串不为空"
  33. else
  34. echo "$a : 字符串为空"
  35. fi

2.6 文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

属性检测描述如下:

举例:

变量 file 表示文件"/data1/jia.sh",它的大小为100字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:

  1. #!/bin/bash
  2. file="/data1/jia.sh"
  3. if [ -r $file ]
  4. then
  5. echo "文件可读"
  6. else
  7. echo "文件不可读"
  8. fi
  9. if [ -w $file ]
  10. then
  11. echo "文件可写"
  12. else
  13. echo "文件不可写"
  14. fi
  15. if [ -x $file ]
  16. then
  17. echo "文件可执行"
  18. else
  19. echo "文件不可执行"
  20. fi
  21. if [ -f $file ]
  22. then
  23. echo "文件为普通文件"
  24. else
  25. echo "文件为特殊文件"
  26. fi
  27. if [ -d $file ]
  28. then
  29. echo "文件是个目录"
  30. else
  31. echo "文件不是个目录"
  32. fi
  33. if [ -s $file ]
  34. then
  35. echo "文件不为空"
  36. else
  37. echo "文件为空"
  38. fi
  39. if [ -e $file ]
  40. then
  41. echo "文件存在"
  42. else
  43. echo "文件不存在"
  44. fi

Shell学习心得(二):传递参数、运算符的更多相关文章

  1. Shell 学习笔记之传递参数

    传递参数 设置权限 chmod +x file.sh 传递参数 ./file.sh parameter1 ... 特殊字符 $# 传递到脚本的参数个数 $* 以一个单字符串的形式显示所有向脚本传递的参 ...

  2. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  3. Shell 学习(二)

    目录 Shell 学习(二) 1 设置环境变量 1.1 基本语法 1.2 实践 2 位置参数变量 2.1 介绍 2.2 基本语法 2.3 位置参数变量应用实例 3 预定义变量 3.1 基本介绍 3.2 ...

  4. shell如何向python传递参数,shell如何接受python的返回值

    1.shell如何向python传递参数 shell脚本 python $sendmailCommandPath $optDate python脚本 lastDateFormat = sys.argv ...

  5. Shell学习笔记二

    一.调试脚本 调试功能是每一种编程语言都应该实现的重要特性之一,当出现一些始料未及的情况时,用它来生成脚本运行信息.调试信息可以帮你弄清楚是什么原因使得程序发生崩溃或行为异常.每位系统程序员都应该了解 ...

  6. shell 学习笔记二

    一.break命令 break命令允许跳出所有循环(终止执行后面的所有循环). 下面的例子中,脚本进入死循环直至用户输入数字大于5.要跳出这个循环,返回到shell提示符下,就要使用break命令. ...

  7. Shell脚本编写3---Shell 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 执行脚本,查看输出结果: 另外 ...

  8. Shell学习(二)Shell变量

    一.Shell变量 变量的定义 例子: my_job="Learn Shell" PS:变量名和等号之间不能有空格!!! 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头 ...

  9. swift学习(二)--基本运算符、字符串、集合操作

    在这一篇博客里面,我想要介绍一下swift里面一些常用的基本运算符,还有涉及到的字符串,集合操作.你会发现在swift里面还是有许多其他语言所不具有的特性运算操作的. 首先最基本的+,-,*,/,&g ...

随机推荐

  1. AOP 应用 性能

    AOP 我的感觉是做些日志什么的比较好,比如在每个controller的api前后搞一下,或者做些metric.今天在spring里用了下AOP并简单的测了一下性能. 使用 业务类 public cl ...

  2. H5添加禁止缩放功能

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scal ...

  3. 分页插件 jquery.pagination.js

    引用 <script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script> <lin ...

  4. CSS 关于屏幕适配REM

    这里不多说了,想详细了解的可以参考 2350305682 的博客 https://www.cnblogs.com/annie211/p/8118857.html 不想多深究,想先实现的看这(移动端): ...

  5. Python os、sys、pickle、json等模块

    1.os 所有和操作系统相关的内容都在os模块,一般用来操作文件系统 import os os.makedirs('dirname1/dirname2') # 可生成多层递归目录 os.removed ...

  6. BZOJ2956: 模积和(数论分块)

    题意 题目链接 Sol 啊啊这题好恶心啊,推的时候一堆细节qwq \(a \% i = a - \frac{a}{i} * i\) 把所有的都展开,直接分块.关键是那个\(i \not= j\)的地方 ...

  7. 【读书笔记】iOS-网络-保护网络传输

    一,验证服务器通信. 二,HTTP认证. 手机银行应用有两种认证模式:标准验证与快速验证.标准验证只是提示用户输入用户名与密码,而快速验证则让用户注册设备,然后使用PIN进行验证,每次验证时无需用户名 ...

  8. CSS隐藏多余的文字

    效果: <p><strong>商品名称:</strong>新鲜现摘云南绥江半边红李子甜脆脱骨李6斤当季绿色有机水果包邮</p></div> ...

  9. mpvue最佳实践 , 美团出的一个小程序框架

    看手机微信,看到说美团出了1个小程序框架,  mpvue 搜下来试试,看了网上的一个对比 ----------------- 以下为引用 我们对微信小程序.mpvue.WePY 这三个开发框架的主要能 ...

  10. 类与接口(二)java的四种内部类详解

    引言 内部类,嵌套在另一个类的里面,所以也称为 嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...