3、Shell变量
创始人
2024-03-04 04:37:18

文章目录

  • 3、变量
    • 3.1 系统预定义变量
    • 3.2 自定义变量
    • 3.3 特殊变量
      • 3.3.1 \$n
      • 3.3.2 \$#
      • 3.3.3 \$\*、\$\@
      • 3.3.4 \$?


尚硅谷2022版Linux扩展篇Shell教程-讲师:武晟然

壁立千仞 无欲则刚

3、变量

3.1 系统预定义变量

1)常用系统变量
$HOME、$PWD、$SHELL、$USER 等
2)案例实操
(1)查看系统变量的值

[root@centos7-101 scripts]# echo $HOME
/root

(2)显示当前 Shell 中全局变量:env

[root@centos7-101 scripts]# env | less
# 或
[root@centos7-101 scripts]# printenv | less

(3)显示当前 Shell 中所有变量:set

[root@centos7-101 scripts]# set | less

env和set的区别是,set命令可以查看所有变量,而env命令只能查看环境变量。

3.2 自定义变量

1)基本语法
(1)定义变量:变量名=变量值,注意,=号前后不能有空格
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly 变量,注意:不能 unset
2)变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
3)案例实操
(1)定义变量 A

[root@centos7-101 scripts]# A=6
[root@centos7-101 scripts]# echo $A
6

(2)给变量 A 重新赋值

[root@centos7-101 scripts]# A=8
[root@centos7-101 scripts]# echo $A
8

(3)撤销变量 A

[root@centos7-101 scripts]# unset A
[root@centos7-101 scripts]# echo $A

(4)声明静态的变量 B=2,不能 unset

[root@centos7-101 scripts]# readonly B=2
[root@centos7-101 scripts]# echo $B
2
[root@centos7-101 scripts]# B=9
-bash: B: 只读变量

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

[root@centos7-101 scripts]# C=1+2
[root@centos7-101 scripts]# echo $C
1+2

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

[root@centos7-101 scripts]# D=i love you
bash: love: 未找到命令...
[root@centos7-101 scripts]# D="i love you"
[root@centos7-101 scripts]# echo $D
i love you

(7)可把变量提升为全局环境变量,export 变量名

[root@centos7-101 scripts]# bash
[root@centos7-101 scripts]# psPID TTY          TIME CMD1623 pts/0    00:00:00 bash7780 pts/0    00:00:00 bash7821 pts/0    00:00:00 ps
[root@centos7-101 scripts]# echo $B[root@centos7-101 scripts]# exit
exit

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

[root@centos7-101 scripts]# export B
[root@centos7-101 scripts]# bash
[root@centos7-101 scripts]# echo $B
2

在子Shell更改的不会影响父Shell

3.3 特殊变量

3.3.1 $n

1)基本语法
$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
2)案例实操

[root@centos7-101 scripts]# touch name.sh
[root@centos7-101 scripts]# vim name.sh
#!/bin/bash
echo '=========$n========='
echo script name:$0
echo 1st paramater:$1
echo 2nd parameter:$2[root@centos7-101 scripts]# chmod u+x name.sh 
[root@centos7-101 scripts]# ./name.sh tianyu xiaoliang
=========$n=========
script name:./name.sh
1st paramater:tianyu
2nd parameter:xiaoliang

3.3.2 $#

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

[root@centos7-101 scripts]# vim name.sh 
#!/bin/bash
echo '=========$n========='
echo script name:$0
echo 1st paramater:$1
echo 2nd parameter:$2
echo '=========$#========='
echo 输入的参数个数:$#[root@centos7-101 scripts]# ./name.sh tianyu xiaoliang
=========$n=========
script name:./name.sh
1st paramater:tianyu
2nd parameter:xiaoliang
=========$#=========
输入的参数个数:2

3.3.3 $*、$@

1)基本语法
$*(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

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

[root@centos7-101 scripts]# vim name.sh 
#!/bin/bash
echo '=========$n========='
echo script name:$0
echo 1st paramater:$1
echo 2nd parameter:$2
echo '=========$#========='
echo 输入的参数个数:$#
echo '=========$*========='
echo $*
echo '=========$@========='
echo $@[root@centos7-101 scripts]# ./name.sh tianyu xiaoliang
=========$n=========
script name:./name.sh
1st paramater:tianyu
2nd parameter:xiaoliang
=========$#=========
输入的参数个数:2
=========$*=========
tianyu xiaoliang
=========$@=========
tianyu xiaoliang

3.3.4 $?

1)基本语法
$?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
2)案例实操
判断 name.sh 脚本是否正确执行

[root@centos7-101 scripts]# ./name.sh tianyu xiaoliang
=========$n=========
script name:./name.sh
1st paramater:tianyu
2nd parameter:xiaoliang
=========$#=========
输入的参数个数:2
=========$*=========
tianyu xiaoliang
=========$@=========
tianyu xiaoliang
[root@centos7-101 scripts]# echo $?
0
[root@centos7-101 scripts]# name.sh
bash: name.sh: 未找到命令...
[root@centos7-101 scripts]# echo $?
127

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...