• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

Shell变量

Shell变量

shell变量从创建者角度可以分为系统变量和自定义变量,从作用范围角度可以分为全局变量和局部变量

系统变量

常用的系统变量,eg:$HOME、$PWD、$SHELL、$USER......

输出某个系统变量的值

[root@zookeeper1 java]# echo $HOME
/root

[root@zookeeper1 java]# printenv HOME
/root

查看所有系统变量

[root@zookeeper1 java]# env
XDG_SESSION_ID=1
HOSTNAME=zookeeper1
SELINUX_ROLE_REQUESTED=
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=192.168.84.1 10955 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=user01
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:
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user01/.local/bin:/home/user01/bin
MAIL=/var/spool/mail/user01
PWD=/home/user01/java
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
HOME=/root
SHLVL=2
LOGNAME=user01
SSH_CONNECTION=192.168.84.1 10955 192.168.84.136 22
XDG_DATA_DIRS=/home/user01/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
LESSOPEN=||/usr/bin/lesspipe.sh %s
DISPLAY=localhost:10.0
XDG_RUNTIME_DIR=/run/user/1000
XAUTHORITY=/root/.xauthPaIw5d
_=/usr/bin/env
OLDPWD=/home/user01/java/shell

查看所有变量

set

自定义变量

语法:变量名=变量值(=号前后不能有空格)

[root@zookeeper1 shell]# i=1
[root@zookeeper1 shell]# echo $i
1

# 变量的值如果有空格,需要使用双引号或单引号括起来
[root@zookeeper1 shell]# s="hello world"
[root@zookeeper1 shell]# echo $s
hello world

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

[root@zookeeper1 shell]# i=1+2
[root@zookeeper1 shell]# echo $i
1+2

撤销变量

语法:unset 变量名

[root@zookeeper1 shell]# unset i
[root@zookeeper1 shell]# echo $i

只读变量

语法:readonly 变量名=变量值

只读变量不能重新赋值和撤销,程序执行完exit退出即结束

[root@zookeeper1 shell]# readonly i
[root@zookeeper1 shell]# echo $i
1+2
[root@zookeeper1 shell]# i=1
bash: i: 只读变量
[root@zookeeper1 shell]# unset i
bash: unset: i: 无法反设定: 只读 variable

注意:以上自定义变量都是局部变量,只在当前shell进程中生效

定义变量i=1,通过bash命令新建子shell进程,然后再输出i则为空,因为子shell进程中是没有定义i变量的,通过exit命令退出子shell进程再输出i则不为空;新建shell脚本,在脚本中输出i,然后执行脚本,输出也是空,因为i是局部变量

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

export i

特殊变量

$n

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

新建param.sh脚本,内容如下:

[root@zookeeper1 shell]# cat param.sh 
#!/bin/bash
echo '---$n'
echo "scriptName:$0"
echo "param1:$1"
echo "param2:$2"

单引号里面的内容会原封不动的输出,但是双引号里面的内容如果包含参数会输出参数值

执行脚本时传入参数

[root@zookeeper1 shell]# ./param.sh a b
---$n
scriptName:./param.sh
param1:a
param2:b

$#

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

增加param.sh脚本内容:

[root@zookeeper1 shell]# cat param.sh 
#!/bin/bash
echo '---$n'
echo "scriptName:$0"
echo "param1:$1"
echo "param2:$2"

echo '---$#'
echo "param number:$#"

执行脚本时传入参数

[root@zookeeper1 shell]# ./param.sh a b
---$n
scriptName:./param.sh
param1:a
param2:b
---$#
param number:2

$*、$@

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

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

$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n 的形式输出所有参数;当它们被双引号“”包含时,$*会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输 出所有参数;$@会将各个参数分开,以“$1” “$2”…“$n”的形式输出所有参数

增加脚本内容:

[root@zookeeper1 shell]# cat param.sh 
#!/bin/bash
echo '---$n'
echo "scriptName:$0"
echo "param1:$1"
echo "param2:$2"

echo '---$#'
echo "param number:$#"

echo '---$*'
echo "param:$*"

echo '---$@'
echo "param:$@"

执行脚本时传入参数

[root@zookeeper1 shell]# ./param.sh a b
---$n
scriptName:./param.sh
param1:a
param2:b
---$#
param number:2
---$*
param:a b
---$@
param:a b

$?

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

增加脚本内容:

[root@zookeeper1 shell]# cat param.sh 
#!/bin/bash
echo '---$n'
echo "scriptName:$0"
echo "param1:$1"
echo "param2:$2"

echo '---$#'
echo "param number:$#"

echo '---$*'
echo "param:$*"

echo '---$@'
echo "param:$@"

echo '---$?'
echo "最后一次执行命令状态:$?"

执行脚本时传入参数

[root@zookeeper1 shell]# ./param.sh a b
---$n
scriptName:./param.sh
param1:a
param2:b
---$#
param number:2
---$*
param:a b
---$@
param:a b
---$?
最后一次执行命令状态:0
记得快乐
posted @ 2022-04-23 21:08  Y-wee  阅读(99)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3