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. 数据结构与算法--最短路径之Bellman算法、SPFA算法

    数据结构与算法--最短路径之Bellman算法.SPFA算法 除了Floyd算法,另外一个使用广泛且可以处理负权边的是Bellman-Ford算法. Bellman-Ford算法 假设某个图有V个顶点 ...

  2. 2.Observer Pattern(观察者模式)

    Observer Pattern(观察者模式)定义: 在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新. 干说定义肯定没有举例理解的透彻.想到Observ ...

  3. JS 模块 p6

    利用了闭包的模块: 简单模块例子: function fn(){ ; function y(){ console.log(x); } return { y:y} }var do1 = fn() do1 ...

  4. vue.js自定义指令详解

    写在文本前:相信在做vue的项目,你肯定接触了指令,我们常用vue内置的一些指令,比如v-model,v-text,v-if,v-show等等,但是这些内置指令不在本文的讲解范畴,本文想说的是其自定义 ...

  5. WeUI移动页面实现时间选择器(年-月-日-时-分)

    在做微信公众号的时候,使用的WeUI样式,有一个需求是用户选择一个预约时间,需要年月日并精确到小时和分钟. 但是WeUI的picker组件不支持直接显示5列,根据WeUI.js作者的建议,是将日期和时 ...

  6. 借助form表单向web服务器发送消息

    form表单是常用的,在网页浏览器中 用户点击的请求经htto协议发送回web容器,请求处理 建立用户的页面 <!DOCTYPE html> <html> <head&g ...

  7. Maven安装本地jar包

    mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.1.0 -Dpackaging= ...

  8. SharePoint designer workflow给一个hyperlink类型得field赋值, How to set value to a hyperlink field by designer workflow

    通过worlfow给一个链接类型得field赋值: 格式是: {link}, {linkDisplayname} 一定要注意逗号后面有个空格. 举个栗子: 如果一个链接显示为 Approve / Re ...

  9. VMware Linux虚拟机与WIN7操作系统共享无线网络上网配置

    Linux虚拟机与WIN7操作系统共享无线网络上网配置 by:授客 QQ:1033553122 测试环境: CentOS-7-x86_64-DVD-1503-01.iso Vmware 9 实践操作: ...

  10. C语言目录

    软件行业的很多细分学科都是都是基于C语言的,学习数据结构.算法.操作系统.编译原理等都离不开C语言. PHP.Python 等都是用C语言开发出来的,虽然平时做项目的时候看不到C语言的影子,但是如果想 ...