Shell脚本中的变量
这篇文章主要介绍了在Shell中变量的使用,本文总结了变量的类型、语法、常见使用形式等内容,并分别给出代码示例,需要的朋友可以参考下
Shell中的变量主要分为一下几种类型:
系统变量
自定义变量
特殊变量
1.系统变量
-
常用的系统变量
$HOME、$PWD、$SHELL、$USER等
-
操作案例
1.2.1)使用(echo+变量)查看系统变量的值
[root@bigdata01 centos-shell]# echo $HOME
/root
[root@bigdata01 centos-shell]# echo $PWD
/opt/data/centos-shell
[root@bigdata01 centos-shell]# echo $SHELL
/bin/bash
[root@bigdata01 centos-shell]# echo $USER
root1.2.2)查询当前Shell中的所有变量(set)
2.自定义变量
-
基本语法
(1)定义变量:变量=值 (2)撤销变量:unset 变量 (3)声明静态变量:readonly 变量,注意:不能unset
-
变量的定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。 (2)等号两侧不能有空格 (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。 (4)变量的值如果有空格,需要使用双引号或单引号括起来。
-
操作案例
(1) 定义变量(变量名a=值1)[root@bigdata01 centos-shell]# a=12 [root@bigdata01 centos-shell]# echo $a 12
(2)给修改变量a的值(变量名a=值2)
[root@bigdata01 centos-shell]# a=111 [root@bigdata01 centos-shell]# echo $a 111
(3)撤销变量(unset 变量名)
(4)静态变量的声明(readonly 变量名=值)[root@bigdata01 centos-shell]# readonly b=2 [root@bigdata01 centos-shell]# echo $b 2 [root@bigdata01 centos-shell]# b=15 尝试修改b的值 -bash: b: readonly variable (!此处报错,因为静态变量不可以修改)
(5)在bash中变量默认字符型,无法参与数值计算操作
此处输出的并不是1+2的计算结果3,而是输出"1+2"这个字符串
(6)变量的值如果用空格,用双引号/单引号括起来
[root@bigdata01 centos-shell]# d=I love Guizhou -bash: love: command not found(没有引号时报错,无法将I Love Guizhou 赋值给变量d) [root@bigdata01 centos-shell]# d="I Love Guizhou" [root@bigdata01 centos-shell]# echo $d I Love Guizhou
(7)可以使用export将变量提升为全局变量,这样变量就可以给其他的Shell程序使用
在helloworld脚本中添加一句echo $d[root@bigdata01 centos-shell]# vi helloworld.sh #! /bin/bash echo "HelloWorld" echo $d
- 直接执行脚本,此时并没有将变量d的值输出
- 将变量d提升为全局变量(export 变量名)
我们想要的结果已经出现,说明了将变量d提升为全局变量后它就可以在Shell脚本中使用了
3.特殊变量
这里主要记录5个特殊的shell变量
$n $# $* $@ $?
-
特殊变量:$n
1.1 基本语法$n
(功能描述:n为数字,$0代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})1.2 案例操作
(1)输出脚本的文件名称、输入参数1和输入参数2 的值
注意:在执行脚本时 在脚本路径后面输入两个参数
[root@bigdata01 centos-shell]# touch guizhou.sh [root@bigdata01 centos-shell]# vi guizhou.sh #! /bin/bash echo "I come from Guizhou" echo $0 $1 $2 [root@bigdata01 centos-shell]# chmod +x guizhou.sh [root@bigdata01 centos-shell]# ./guizhou.sh Guiyang Huaxi I come from Guizhou ./sum.sh Guiyang Huaxi
-
特殊变量:$#
2.1 基本语法$#
(功能描述:获取所有输入参数个数,常用于循环)。2.2 案例操作
(1) 获取输入参数的个数[root@bigdata01 centos-shell]# vi sum.sh #! /bin/bash echo "I come from Guizhou" echo $# [root@bigdata01 centos-shell]# ./sum.sh Guiyang Huaxi I come from Guizhou 2
-
特殊变量:
$*和$@
3.1 基本语法$*
(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)3.2 案例实操
(1)打印输入的所有参数[root@bigdata01 centos-shell]# vi sum.sh #! /bin/bash echo "I come from Guizhou" echo $# echo $* echo $@ [root@bigdata01 centos-shell]# ./sum.sh Guiyang Huaxi I come from Guizhou 2 Guiyang Huaxi Guiyang Huaxi
-
特殊变量:$?
4.1 基本语法$?
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)4.2 案例操作
(1)判断sum.sh脚本是否正确执行[root@bigdata01 centos-shell]# ./sum.sh Guiyang Huaxi I come from Guizhou 2 Guiyang Huaxi Guiyang Huaxi [root@bigdata01 centos-shell]# echo $? 0
输出0表示sum.sh正确执行,如果输出的是非零,则表示sum.sh执行过程中出错了
Shell的变量就写下这些比较常用的部分,希望我们都可以在自己的专业上大步向前走,扎实掌握我们的专业知识,让自己的未来绽放光芒!!!