【现学现忘&Shell基础】—|【现学现忘&Shell基础】— 16.位置参数变量
位置參数变量的作用主要用于脚本的传参。
位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变量的值。
位置參数变量如下:
位置参数变量 | 作用 |
---|---|
$n |
n为数字,$0 代表命令本身,$1-$9 代表(脚本命令后的)第一到第九个参数,十以上的参数需要用大括号包含,如${10} 、${15} 。 |
$* |
这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体。 |
$@ |
这个变量也代表命令行中所有的参数,不过$@ 把每个参数区分对待。 |
$# |
这个变量代表命令行中所有参数的个数。 |
$n
$n
:n为数字,$0
代表命令本身,$1-$9
代表(脚本命令的)第一到第九个参数,十以上的参数需要用大括号包含,如${10}
、${15}
。(这个是一个典型的向Shell脚本当中传递值的方式)(1)示例
# 定义一个shell脚本,简单的计算器,求两个数的和。[root@Lyl tmp]# vim count.sh# 脚本内容如下:#!/bin/bash# 给num1变量赋值是第一个参数
num1=$1
# 给num2变量赋值是第二个参数
num2=$2# 变量sum是变量num1加变量num2的(其实上边的num1和num2的定义可以省略)
sum=$(($num1 + $num2))
# 注意:执行count.sh脚本后的第一个参数会传递给$1,第二个参数会传递给$2,
# 然后$num1和$num2进行求和,再赋值给sum变量。
# 但是Shell中自定义变量的默认类型是字符串类型,
# 而我们传入的两个数字类型的变量值,Shell默认都识别为字符串类型。
# 而这个时候我们就需要$(( ))把这个两个字符串类型的数值括起来,
# Shell才能知道要进行数值运算,里边的参数都是数值(Shell运算符中会详细讲)。
# 而$( )是括系统命令的,然后把该命令运行的结果,赋值给前面的变量,这个我们要注意。#打印变量sum的值
echo $sum
echo $0# 执行该脚本
[root@Lyl tmp]# chmod 755 count.sh
[root@Lyl tmp]# ./count.sh 22 66
88
./count.sh
(2)总结:
- $1保存的是执行Shell命令之后的第一个参数,
- $2保存的是执行Shell命令之后的第二个参数,
- $0代表执行脚本的命令,如上边的
./count.sh
。
- 位置參数变量好处
【【现学现忘&Shell基础】—|【现学现忘&Shell基础】— 16.位置参数变量】其作用就是把执行脚本命令后输入的参数,传入到脚本中,使脚本中的变量可以灵活取值。
- 位置參数变量的缺点
如果是一个普通的Linux用户,该脚本并不是自己写的。当你获得该脚本的时候,你是无法知道需要在脚本后边是否加参数,或者是加什么参数,脚本才能正确运行,是没有任何提示的。
所以用位置參数变量传参,并不适合给普通用户来使用,一般是写的脚本自己用的时候,用的比较多。
提示:2、位置参数变量
位置參数变量也可以给函数中传参(其实就是自己给自己传值)。
给普通用户的脚本,传参的方式用read
,会有提示,比较友好,我们之后说明。
$*
和$@
$*
:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体。$@
:这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待。(1)用法 我们先写一个脚本来展示一下位置参数变量
$*
和$@
的用法:# 定义一个脚本parameter.sh[root@Lyl tmp]# vim parameter.sh# 脚本内容如下:#!/bin/bash# 使用$*代表所有的参数(所有参数整体对待)
echo "The parameters \$* is:$*"
# 使用也代表所有参数(所有参数分开对待)
echo "The parameters \$@ is:$@"# 执行该脚本
[root@Lyl tmp]# chmod 755 parameter.sh
[root@Lyl tmp]# ./parameter.sh 11 22 33 44
The parameters $* is:11 22 33 44
The parameters $@ is:11 22 33 44
我们可以看到位置参数变量
$*
和$@
,都把执行脚本命令后边带的参数打印出来了。(2)区别 位置参数变量
$\*
和$@
的区别是,$*
把所有参数当作一个整体,而$@
是先把11赋值给$@
,在把22赋值给$@
,以此类推,是分开的。我们通过下边的例子来说明:
# 我们先简单的来说一下for循环
# 简单的for循环例子for i in 1 2 3 4
do
echo $i
done# 说明:
# 在in后有几个数或者说是以空格隔开的变量(因为默认都是字符串类型),
# in后有几个变量,这个for循环就循环几次。
# 第一次循环,把第一个变量赋值给in前边的变量i,然后进入循环操作。
# 这只是for循环的一种形式,知道流程即可,后边会在详细说明Bash中的for循环。
# do和done就类似于Java中for循环的大括号(先这样理解就可以)。# 写一个for循环脚本
[root@Lyl tmp]# vim for.sh# 脚本内容如下:#!/bin/bash
for i in 1 2 3 4
do
echo $i
done# 执行该脚本
[root@Lyl tmp]# chmod 755 for.sh
[root@Lyl tmp]# ./for.sh
1
2
3
4
示例区别:
# 定义一个脚本param.sh
[root@Lyl tmp]# vim param.sh# 脚本内容如下:#!/bin/bash# 定义for循环,in后面有几个值,for会循环多少次,
# 注意"S*"要用双引号括起来,每次循环会把in后面的值赋予变量i,
# Shell把$*中的所有参数看成是一个整体,所以这个for循环只会循环一次。for i in "$*"
do
# 打印变量i的值
echo "循环了"$i
doneecho "==============="# Shell把$@中的每个参数都看成是独立的,所以“$@"中有几个参数,就会循环几次。
# 注意两个for循环的变量名最好不相同,以示区别。相同也没关系。
for j in "$@"
do
# 打印变量j的值
echo "循环了"$j
done# 执行该脚本
[root@Lyl tmp]# chmod 755 param.sh
[root@Lyl tmp]# ./param.sh 11 22 33 44
循环了11 22 33 44
===============
循环了11
循环了22
循环了33
循环了44
图示:
文章图片
3、位置参数变量
$#
$#
:这个变量代表命令行中所有参数的个数。示例:
# 定义一个脚本parameter.sh[root@Lyl tmp]# vim parameter.sh# 脚本内容如下:#!/bin/bash# 使用$#代表所有参数的个数
echo "The parameters \$# is:$#"# 执行该脚本
[root@Lyl tmp]# chmod 755 parameter.sh
[root@Lyl tmp]# ./parameter.sh 11 22 33 44
The parameters $# is:4
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长