02Shell的变量

一、Shell 的变量的介绍

1)Linux Shell 中的变量分为:系统变量和用户自定义变量。

2)常用系统变量

系统变量:$HOME$PWD$SHELL$USER 等等

比如: echo $HOME 等等

3)显示系统变量

env:查看所有全局环境变量

printenv:查看所有的系统全局环境变量

printenv 环境变量:查看指定的环境变量(变量前不需要加 $)

4)显示所有变量(系统变量+用户自定义的变量)

显示当前 shell 中所有变量:set 显示所有系统的,用户自定义的变量

二、自定义 shell 变量

1、基本语法

1)定义变量:变量=值

2)撤销变量:unset 变量

3)声明静态变量:readonly 变量,注意:不能 unset

2、定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
  2. 等号两侧不能有空格,变量名称一般习惯为大写
  3. 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
  4. 变量的值如果有空格,需要使用双引号或单引号括起来。
快速入门

案例 1:定义变量 A

[niujifei@njf ~]$ A=5
[niujifei@njf ~]$ echo $A
5

案例 2:给变量 A 重新赋值

[niujifei@njf ~]$ A=8
[niujifei@njf ~]$ echo $A
8

案例 3:撤销变量 A

[niujifei@njf ~]$ unset A
[niujifei@njf ~]$ echo $A

案例 4:声明静态的变量 B=2,不能 unset

[niujifei@njf ~]$ readonly B=2
[niujifei@njf ~]$ echo $B
2
[niujifei@njf ~]$ B=9
-bash: B: 只读变量
[niujifei@njf ~]$ unset B
-bash: unset: B: 无法反设定: 只读 variable

案例 5:在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算

[niujifei@njf ~]$ C=1+2
[niujifei@njf ~]$ echo $C
1+2

案例 6:变量的值如果有空格,需要使用双引号或单引号括起来

[niujifei@njf ~]$ D=I love shell
-bash: love: 未找到命令
[niujifei@njf ~]$ D="I love shell"
[niujifei@njf ~]$ echo $D
I love shell

案例 7:可把变量提升为全局环境变量,可供其他 shell 程序使用

export 变量名

[niujifei@njf ~]$ cat helloWorld.sh
#!/bin/bash
echo "hello world!"

echo $B
[niujifei@njf ~]$ ./helloWorld.sh
hello world!

[niujifei@njf ~]$

发现并没有打印输出变量 B 的值

三、设置环境变量

1、基本语法

  1. export 变量名=变量值 (功能描述:将 shell 变量输出为系统环境变量)
  2. source 配置文件 (功能描述:让修改后的配置信息立即生效)
  3. echo $ 变量名 (功能描述:查询环境变量的值)

2、入门案例

(1)在 helloworld.sh 文件中定义 TOMCAT_HOME 环境变量

[niujifei@njf ~]$ cat helloWorld.sh
#!/bin/bash
echo "hello world!"

echo $B

#自定义一个变量,并使用export导出为环境变量
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME

(2)查看环境变量 TOMCAT_HOME 的值

[niujifei@njf ~]$ echo $TOMCAT_HOME
/opt/tomcat

(3) 在另外一个 shell 程序中使用 TOMCAT_HOME

[niujifei@njf ~]$ source helloWorld.sh
hello world!
2
[niujifei@njf ~]$ cat helloWorld.sh
#!/bin/bash
echo "hello world!"

echo $B

#自定义一个变量,并使用export导出为环境变量
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME
[niujifei@njf ~]$ cat myShell.sh
#!/bin/bash

echo $TOMCAT_HOME
[niujifei@njf ~]$ ./myShell.sh
/opt/tomcat
[niujifei@njf ~]$

注意:在输出 TOMCAT_HOME 环境变量前,需要让其生效 source /etc/profile
使用 env 和 set 命令也可以看到导出的变量

注意:
export 可以把一个局部变量导出为全部变量,在子 Shell 中也可以使用,但是在子 Shell中修改了再导出后在父Shell中无法使用。

父Shell中定义修改的变量可以通过export提升为环境变量,可以在子Shell中使用。

子Shell定义修改的变量只对当前Shell可用,且无法提升为环境变量。

四、将命令的返回值赋给变量(重点)

基本语法

A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量 A

A=$(ls -la) 等价于反引号

入门案例:

[niujifei@njf ~]$ cat test2.sh
#!/bin/bash

RESULT=`ls -l /home`
echo $RESULT
echo ""
MY_DATE=$(date)
echo $MY_DATE
[niujifei@njf ~]$ ./test2.sh
总用量 4 drwx------ 2 niujifei niujifei 4096 3月 10 14:45 niujifei

2023年 03月 10日 星期五 14:45:59 CST
[niujifei@njf ~]$

五、位置参数变量

1、介绍

当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如:./myshell.sh 100 200, 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息

2、基本语法

$n(功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10}$*(功能描述:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体)

$@(功能描述:这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待)

$#(功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)

3、位置参数变量应用实例

案例:编写一个 shell 脚本 param.sh,在脚本中获取到命令行的各个参数信息

[niujifei@njf ~]$ cat param.sh
#!/bin/bash

echo '===$n==='
echo $0
echo $1
echo $2
echo $3

echo '===$#==='
echo $#

echo '===$*==='
echo $*

echo '===$@==='
echo $@
[niujifei@njf ~]$ ./param.sh a b c
===$n===
./param.sh
a
b
c
===$#===
3
===$*===
a b c
===$@===
a b c
[niujifei@njf ~]$

六、预定义变量

1、基本介绍

就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用

2、基本语法

$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令
正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

3、应用实例

在一个 shell 脚本中简单使用一下预定义变量

[niujifei@njf ~]$ cat preVar.sh
#!/bin/bash

echo "当前的进程号=$$"

#后台的方式运行 myShell.sh, &在后台的方式运行
./myShell.sh  &

echo "最后的进程号=$!"
echo "执行的值=$?"
[niujifei@njf ~]$ ./preVar.sh
当前的进程号=15206
最后的进程号=15207
执行的值=0
[niujifei@njf ~]$

七、把自定义脚本当做命令来运行

当我们在执行自定义的脚步是其实和执行的命令效果一样,为什么LInux支持很多命令呢?

因为这些命令也是用脚本来写的,只是放在了 /bin 目录下(真实目录的 /usr/bin),并且设置在 PATH 环境变量中,所以在任何地方都是用这些命令。

如果想要在任何地方都执行我们自定义的脚步,是不是也可以这样呢?

由于/bin,/sbin 这些目录都是系统内置的,我们不希望做修改,我们可以把脚本的目录添加到PATH路径中,查看是否生效

(1)在/root/scripts目录下创建一个Shell

(2)在 /etc/profile 中把上面的路径添加到PATH环境变量并刷新

(3)切换到任意目录,执行hello.sh 脚本


这时候就可以在任意目录执行自定义的脚步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值