1、传递参数

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

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

#!/bin/bash

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

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

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

#!/bin/bash

echo "Shell 传递参数实例!";
echo "第一个参数为:$1";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

$* 与 $@ 区别:

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

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

#!/bin/bash

echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

2、运算符

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

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

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

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

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

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

#!/bin/bash

val=` + `
echo "两数之和为 : $val"

结果:

两点注意:

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

2.1 基本运算符

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

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

举例:

 #!/bin/bash

 a=
 b=

 val=`expr $a + $b`
 echo "a + b : $val"

 val=`expr $a - $b`
 echo "a - b : $val"

 val=`expr $a \* $b`
 echo "a * b : $val"

 val=`expr $b / $a`
 echo "b / a : $val"

 val=`expr $b % $a`
 echo "b % a : $val"

 if [ $a == $b ]
 then
    echo "a 等于 b"
 fi
 if [ $a != $b ]
 then
    echo "a 不等于 b"
 fi

运行结果:

注意:

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

2.2 关系运算符

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

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

举例:

a=
b=

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

2.3 布尔运算符

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

举例:

#!/bin/bash

a=
b=

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
 -a $b -gt  ]
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
 -o $b -gt  ]
then
   echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
 -o $b -gt  ]
then
   echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi

2.4 逻辑运算符

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

举例:

 #!/bin/bash

 a=10
 b=20

 if [[ $a -lt 100 && $b -gt 100 ]]
 then
    echo "返回 true"
 else
    echo "返回 false"
 fi

 if [[ $a -lt 100 || $b -gt 100 ]]
 then
    echo "返回 true"
 else
    echo "返回 false"
 fi

2.5 字符串运算符

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

举例:

 #!/bin/bash

 a="abc"
 b="efg"

 if [ $a = $b ]
 then
    echo "$a = $b : a 等于 b"
 else
    echo "$a = $b: a 不等于 b"
 fi
 if [ $a != $b ]
 then
    echo "$a != $b : a 不等于 b"
 else
    echo "$a != $b: a 等于 b"
 fi
 if [ -z $a ]
 then
    echo "-z $a : 字符串长度为 0"
 else
    echo "-z $a : 字符串长度不为 0"
 fi
 if [ -n "$a" ]
 then
    echo "-n $a : 字符串长度不为 0"
 else
    echo "-n $a : 字符串长度为 0"
 fi
 if [ $a ]
 then
    echo "$a : 字符串不为空"
 else
    echo "$a : 字符串为空"
 fi

2.6 文件测试运算符

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

属性检测描述如下:

举例:

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

 #!/bin/bash
 file="/data1/jia.sh"
 if [ -r $file ]
 then
    echo "文件可读"
 else
    echo "文件不可读"
 fi
 if [ -w $file ]
 then
    echo "文件可写"
 else
    echo "文件不可写"
 fi
 if [ -x $file ]
 then
    echo "文件可执行"
 else
    echo "文件不可执行"
 fi
 if [ -f $file ]
 then
    echo "文件为普通文件"
 else
    echo "文件为特殊文件"
 fi
 if [ -d $file ]
 then
    echo "文件是个目录"
 else
    echo "文件不是个目录"
 fi
 if [ -s $file ]
 then
    echo "文件不为空"
 else
    echo "文件为空"
 fi
 if [ -e $file ]
 then
    echo "文件存在"
 else
    echo "文件不存在"
 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. Navicat相关应用及注意事项

    一.MySQL数据类型 1.数值型 SMALLINT: 2个字节 INT: 4个字节      // age int(10) INTEGER:INT的同义词 BIGINT : 8个字节 FLOAT : ...

  2. 【Tomcat】部署Web到tomcat的四种方式

    一.静态部署 1.直接将web项目文件件拷贝到webapps 目录中     Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JSP ...

  3. 测试单元测试完毕关闭jvm

    今天一天都在纠结Netty中的服务器端究竟是如何实现自动关闭的, 吃完晚饭才发现原来不是netty关闭,是测试单元关闭的...

  4. Hadoop集群动态服役新的数据节点&&退役数据节点

    备注:新添的机器为hadoop05,现有hadoop01.hadoop02.hadoop03.hadoop04 环境准备: 1.先克隆一台和集群中一样的机器 2.修改机器ip和主机名称 3.删除原来的 ...

  5. 分布式Session一致性解决方案有哪些?

    1.使用cookie代替session(不安全,不推荐使用) 2.使用数据库存储session(效率低,不推荐使用) 3.使用nginx反向代理ip绑定方法,同一个ip只能在同一台服务器上进行访问(不 ...

  6. springboot项目中js、css静态文件路径访问

    springboot静态文件访问的问题,相信大家也有遇到这个问题,如下图项目结构. 项目结构如上所示,静态页面引入js.css如下所示. 大家肯定都是这样写的,但是运行的话就是出不来效果,图片也不显示 ...

  7. Css 基础知识(一)

    1.Css概念 CSS 指层叠样式表 (Cascading Style Sheets)(级联样式表),Css是用来美化html标签的,相当于页面化妆. ◆样式表书写位置 2. 选择器 2.1.写法 选 ...

  8. WiFi 统一管理以及设备自动化测试实践

    ATX 安卓设备 WiFi 统一管理以及设备自动化测试实践 (零散知识梳理总结) 此文为转载,感谢作者  目录  众所周知,安卓单台设备的UI自动化测试已经比较完善了,有数不清的自动化框架或者工具.但 ...

  9. 【Python】opencv显示图像

    import cv2 img = cv2.imread("lena.jpg") cv2.namedWindow("Image") cv2.imshow(&quo ...

  10. 团队项目个人进展——Day09

    一.昨天工作总结 冲刺第九天,把地图和界面整合了一下 二.遇到的问题 地图的样式和一些公共样式有冲突 三.今日工作规划 团队共同整合程序,做出第一阶段的成品.