八 、变量

1 系统预定义变量
[root@hadoop100 scripts]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       2022   2014  0 9月09 pts/0   00:00:00 -bash
root       8960   2022  0 02:28 pts/0    00:00:00 ps -f
[root@hadoop100 scripts]# bash
[root@hadoop100 scripts]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       2022   2014  0 9月09 pts/0   00:00:00 -bash
root       8969   2022  0 02:28 pts/0    00:00:00 bash
root       9002   8969  0 02:28 pts/0    00:00:00 ps -f
[root@hadoop100 scripts]# ./hello.sh 
hello,world
[root@hadoop100 scripts]# exit
exit
[root@hadoop100 scripts]# 
[root@hadoop100 scripts]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       2022   2014  0 9月09 pts/0   00:00:00 -bash
root       9068   2022  0 02:35 pts/0    00:00:00 ps -f
[root@hadoop100 scripts]# 


在这里插入图片描述

1)常用系统变量

H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER 等

2)案例实操

(1)查看系统变量的值

[root@hadoop100 scripts]#  echo $HOME #查看$HOME 环境变量的地址
/root
[root@hadoop100 scripts]# env # 或者printenv 查看系统所有的全局的系统变量
XDG_SESSION_ID=1
HOSTNAME=hadoop100
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.174.1 57482 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root/scripts
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_CONNECTION=192.168.174.1 57482 192.168.174.100 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
DISPLAY=localhost:10.0
_=/usr/bin/env
OLDPWD=/root
[root@hadoop100 scripts]# 


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

[atguigu@hadoop101 shells]$ set 
BASH=/bin/bash 
BASH_ALIASES=() 
BASH_ARGC=() 
BASH_ARGV=()
2 自定义变量
1)基本语法

(1)定义变量:变量名=变量值,注意,=号前后不能有空格
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly 变量,注意:不能 unset

2)变量定义规则

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

3)案例实操

(1)定义变量 A

[atguigu@hadoop101 shells]$ A=5 
[atguigu@hadoop101 shells]$ echo $A 
5

(2)给变量 A 重新赋值

[atguigu@hadoop101 shells]$ A=8 [atguigu@hadoop101 shells]$ echo $A 
8

(3)撤销变量 A

[atguigu@hadoop101 shells]$ unset A 
[atguigu@hadoop101 shells]$ echo $A

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

[atguigu@hadoop101 shells]$ readonly B=2 # readonly 只读变量
[atguigu@hadoop101 shells]$ echo $B 
2
[atguigu@hadoop101 shells]$ B=9 
-bash: B: readonly variable

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

[atguigu@hadoop102 ~]$ C=1+2 
[atguigu@hadoop102 ~]$ echo $C 
1+2

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

[atguigu@hadoop102 ~]$ D=I love banzhang 
-bash: world: command not found 
[atguigu@hadoop102 ~]$ D="I love banzhang" 
[atguigu@hadoop102 ~]$ echo $D 
I love banzhang

(7)可把变量提升为全局环境变量,可供其他 Shell 程序使用

export 变量名 
[atguigu@hadoop101 shells]$ vim helloworld.sh

在 helloworld.sh 文件中增加 echo $B

#!/bin/bash 
echo "helloworld" 
echo $B
[atguigu@hadoop101 shells]$ ./helloworld.sh 
Helloworld

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

[atguigu@hadoop101 shells]$ export B 
[atguigu@hadoop101 shells]$ ./helloworld.sh 
helloworld 
2
3 特殊变量
1)基本语法

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

2)案例实操
[atguigu@hadoop101 shells]$ touch parameter.sh [atguigu@hadoop101 shells]$ vim parameter.sh 
#!/bin/bash 
echo '==========$n==========' 
echo $0 
echo $1 
echo $2 
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh [atguigu@hadoop101 shells]$ ./parameter.sh cls xz ==========$n========== 
./parameter.sh 
cls 
xz
2 $#
1)基本语法

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

2)案例实操
[atguigu@hadoop101 shells]$ vim parameter.sh 
#!/bin/bash 
echo '==========$n==========' 
echo $0 
echo $1 
echo $2 
echo '==========$#==========' 
echo $# 
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh [atguigu@hadoop101 shells]$ ./parameter.sh cls xz ==========$n========== 
./parameter.sh 
cls
xz
==========$#========== 
2
3 ∗ 、 *、 @
1)基本语法

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

2)案例实操
[atguigu@hadoop101 shells]$ vim parameter.sh 
#!/bin/bash 
echo '==========$n==========' 
echo $0 
echo $1 
echo $2 
echo '==========$#==========' 
echo $# 
echo '==========$*==========' 
echo $* 
echo '==========$@==========' 
echo $@ 
[atguigu@hadoop101 shells]$ ./parameter.sh a b c d e f g 
==========$n========== 
./parameter.sh 
a
b
==========$#==========
7
==========$*==========
a b c d e f g 
==========$@========== 
a b c d e f g
4 $?
1)基本语法

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

2)案例实操

判断 helloworld.sh 脚本是否正确执行

[atguigu@hadoop101 shells]$ ./helloworld.sh 
hello world [atguigu@hadoop101 shells]$ echo $? 
0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值