『忘了再学』Shell基础 — 16、位置参数变量
位置參数变量的作用主要用于脚本的传参。
位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变量的值。
位置參数变量如下:
位置参数变量 | 作用 |
---|---|
$n |
n 为数字,$0 代表命令本身,$1-$9 代表(脚本命令后的)第一到第九个参数,十以上的参数需要用大括号包含,如${10} 、${15} 。 |
$* |
这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体。 |
$@ |
这个变量也代表命令行中所有的参数,不过$@ 把每个参数区分对待。 |
$# |
这个变量代表命令行中所有参数的个数。 |
1、位置参数变量$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
。
- 位置參数变量好处。
其作用就是把执行脚本命令后输入的参数,传入到脚本中,使脚本中的变量可以灵活取值。 - 位置參数变量的缺点。
如果是一个普通的Linux用户,该脚本并不是自己写的。当你获得该脚本的时候,你是无法知道需要在脚本后边是否加参数,或者是加什么参数,脚本才能正确运行,是没有任何提示的。
所以用位置參数变量传参,并不适合给普通用户来使用,一般是写的脚本自己用的时候,用的比较多。
提示:
位置參数变量也可以给函数中传参(其实就是自己给自己传值)。
给普通用户的脚本,传参的方式用
read
,会有提示,比较友好,我们之后说明。
2、位置参数变量$*
和$@
$*
:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体。
$@
:这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待。
(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
done
echo "==============="
# 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
『忘了再学』Shell基础 — 16、位置参数变量的更多相关文章
- 『忘了再学』Shell基础 — 11、变量定义的规则和分类
目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...
- 『忘了再学』Shell基础 — 21、变量的测试与内容置换
目录 1.什么是变量的测试与内容置换 2.变量的测试与内容置换 3.示例 例1: 例2: 例3: 1.什么是变量的测试与内容置换 我们之前说过,在Shell中,一个变量未定义,和一个变量为空值的输出效 ...
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- 『忘了再学』Shell基础 — 13、环境变量(一)
目录 1.用户自定义的环境变量 (1)环境变量设置 (2)查询自定义环境变量 (3)删除自定义环境变量 2.系统自带的环境变量--PATH环境变量 (1)PATH环境变量 (2)PATH环境变量的作用 ...
- 『忘了再学』Shell基础 — 17、预定义变量
目录 1.预定义变量$? 2.预定义变量$$和$! 我们之前说过,Shell中的变量不是按照变量值的类型来进行分类的,而是按照Linux系统中定义的变量类别来分类的. 预定义变量就是,事先把变量的名称 ...
- 『忘了再学』Shell基础 — 19、使用declare命令声明变量类型
目录 1.declare命令介绍 2.声明数组变量类型 3.声明变量为环境变量 4.声明只读属性 5.补充: 1.declare命令介绍 Shell中所有变量的默认类型是字符串类型,如果你需要进行特殊 ...
- 『忘了再学』Shell基础 — 22、主要的环境变量配置文件说明
目录 1.source命令 2.Linux系统中环境变量配置文件 (1)登录时生效的环境变量配置文件 (2)/etc/profile环境变量配置文件 (3)/etc/profile.d/*.sh环境变 ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...
- 『忘了再学』Shell基础 — 24、Shell正则表达式的使用
目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...
随机推荐
- 12 Web Development Trends That Will Dominate 2022
12 Web Development Trends That Will Dominate 2022 (mindinventory.com) Progressive Web Apps (PWAs) An ...
- 设备像素,CSS像素,设备独立像素
1.概念 设备像素(device pixel)简写DP 设备像素又称 **物理像素** ,是设备能控制显示的最小单位,我们可以把它看做显示器上的一个点.我们常说的 1920x1080像素分辨率就是用的 ...
- 开源HTML5游戏引擎Kiwi.js 1.0正式发布
Kiwi.js是由GameLab开发的一款全新的开源HTML5 JavaScript游戏引擎.在经过一年多的开发和测试之后,终于在日前正式发布了Kiwi.js 1.0版本. 其创始人Dan Milwa ...
- Spring Security的使用
spring security使用目的:验证,授权,攻击防护. 原理:创建大量的filter和interceptor来进行请求的验证和拦截,以此来达到安全的效果. Spring Security主要包 ...
- C++中的算法头文件<algorithm>,<numeric>和<functional>
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成.<algorithm>是所有STL头文件中最大的一个,它是 ...
- ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)
Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...
- Struts的Logic标签的用途
Struts的Logic标签可以根据特定的逻辑条件来判断网页的内容,或者循环遍历集合元素,它和HTML,Bean标签是Struts应用中最常用的三个标签. 它的功能主要是比较运算,进行字符串的匹配,判 ...
- EMS修改邮箱容量限制的方法
使用PowerShell命令完成邮箱数据库限制任务. 以Exchange管理员身份打开EMS控制台.在PowerShell命令提示符下,键入如下命令. Set-MailboxDatabase Test ...
- An=n的前n项和的前n项和
#include<iostream> using namespace std; int main() { int n,a=0,b=0; cin>>n; for(int i=1; ...
- 在线操作word和在线预览查找的资料记录
在线操作word和在线预览查找的资料记录 在线操作word查找的资料记录 富文本操作 http://fex.baidu.com/ueditor/ 控件类 通过 js 调用控件操作 word 文档 1. ...