shell传递参数

Posted 古兰精

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell传递参数相关的知识,希望对你有一定的参考价值。

一、传递参数

1、在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n

  n 代表一个数字,0 为执行的文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推

#以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):

#!/bin/bash
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

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

$ chmod +x test.sh 
$ ./test.sh 1 2 3
# 结果
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

2、其他特殊符号:

  $#  传递到脚本的参数个数、$* 或 $@  所有向脚本传递的参数、$$  脚本运行的当前进程ID号、$!  后台运行的最后一个进程的ID号、

  $?  显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

二、shell 运算符

1、算术、关系、布尔、字符串、文件测试运算符。

2、原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

#两个数相加(注意使用的是反引号 ` 而不是单引号 \')

#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"

  两点注意:

(1)表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。

(2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

3、算术运算符:

#假定变量 a 为 10,变量 b 为 20:
`expr $a + $b` #30
`expr $a - $b`  #-10

`expr $a \\* $b` # 200
`expr $b / $a`   # 2

`expr $b % $a`  #0   取余

a=$b    # 赋值  -  将把变量 b 的值赋给 a

[ $a == $b ]  # false   -  ==  相等。用于比较两个数字,相同则返回 true
[ $a != $b ]   # true    -  !=   不相等。用于比较两个数字,不相同则返回 true

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

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

  -eq 检测两个数是否相等,相等返回 true。

  -ne 检测两个数是否不相等,不相等返回 true。

  -gt 检测左边的数是否大于右边的,如果是,则返回 true。

  -lt 检测左边的数是否小于右边的,如果是,则返回 true。

  -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。

  -le 检测左边的数是否小于等于右边的,如果是,则返回 true。

5、布尔运算符  ——  ! 非运算、-o 或运算、-a 与运算

6、逻辑运算符  ——  && 逻辑的 AND、|| 逻辑的 OR

7、字符串运算符:

  = 检测两个字符串是否相等、      != 检测两个字符串是否不相等、

  -z 检测字符串长度是否为0,为0返回 true、     -n 检测字符串长度是否不为 0

  $ 检测字符串是否为空,不为空返回 true

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

  -d file 检测文件是否是目录、  -f file 检测文件是否是普通文件(既不是目录,也不是设备文件)、 

  -r file 检测文件是否可读、  -w file 检测文件是否可写、   -x file 检测文件是否可执行

  -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true、    -e file 检测文件(包括目录)是否存在,如果是,则返回 true

三、echo 命令 - 用于字符串的输出

#显示普通字符串:
echo "It is a test"

#显示转义字符:
echo "\\"It is a test\\""

1、显示变量:read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

#!/bin/sh
read name 
echo "$name It is a test"

#以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh
OK                     #标准输入
OK It is a test        #输出

2、-e 用于开启转义

#显示换行
echo -e "OK! \\n" # -e 开启转义  \\n 换行

#显示不换行
echo -e "OK! \\c" # -e 开启转义 \\c 不换行

3、显示结果定向至文件

echo "It is a test" > myfile

4、原样输出字符串,不进行转义或取变量(用单引号)

echo \'$name\\"\'

#输出结果:
$name\\"

5、显示命令执行结果

echo `date`
#注意: 这里使用的是反引号 `, 而不是单引号 \'。
#结果将显示当前日期

 

以上是关于shell传递参数的主要内容,如果未能解决你的问题,请参考以下文章

03-shell-传递参数

shell如何传递外部参数给文件

将参数从 Qt 传递到 shell 脚本文件

如何调用 shell 脚本并从另一个 shell 脚本传递参数

关于Wscript.Shell中 Run参数传递

关于Wscript.Shell中 Run参数传递