点击蓝字
关注我们
注: 本文为安丫科技丢小九的原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
在现代的系统管理和自动化任务中,Shell脚本扮演着不可或缺的角色。Shell脚本的灵活性和强大功能使其成为IT专业人员和开发者的首选工具。
在Shell脚本中,变量是存储和操作数据的基本单元,它们对于编写有效和可维护的脚本至关重要。
01
变量的基本概念
在Shell脚本中,变量是用来存储数据值的占位符。变量可以包含字符串、数字或命令的输出。变量通常以字母开头,可以包含字母、数字和下划线。
--错误命名[root@localhost ~]# 1var=aaabash: 1var=aaa: command not found...--正确命名[root@localhost ~]# var1=aaa[root@localhost ~]# [root@localhost ~]# 1var=aaabash: [root@localhost: command not found...
02
变量的基本操作
1. 变量的声明和赋值
在Shell脚本中,变量的声明和赋值非常简单,但需注意,变量名和等号之间不能有空格。
① 直接赋值
[root@localhost ~]# ip1=1.1.1.1[root@localhost ~]# echo $ip11.1.1.1
② 使用其他变量赋值
[root@localhost ~]# ip1=1.1.1.1[root@localhost ~]# ip2=$ip1[root@localhost ~]# echo $ip21.1.1.1
③ 使用双引号和单引号赋值
双引号:弱引用,双引号里可以有变量,可以出现转义字符。
num=5;echo "数字:$num"
单引号:强引用,单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。
num=5;echo '数字:$num'--输出结果数字:$num
④交互式赋值
#!/bin/bash# 提示用户输入他们的名字,并将其赋值给变量nameecho "请输入名字:"read nameecho "Hello, $name!"# 提示用户输入年龄,并将其赋值给标量ageread -p "请输入年龄:" ageecho "年龄:$age"# 提示用户输入一个密码,并将其赋值给变量passwordecho "Enter a password (input will be hidden):"read -s passwordecho $password# 等待用户按下回车键readecho "结束"[root@localhost ~]# sh name.sh请输入名字:aliceHello, alice!请输入年龄:18年龄:18Enter a password (input will be hidden):1234567结束
2. 变量的读取和输出
读取变量值并在脚本中使用时,需要在变量名前加上美元符号($)。例如,$变量名 或 ${变量名}
echo $numecho ${num}
03
变量的类型
1. 自定义变量
自定义局部变量
在当前shell中设置的变量只对当前shell有效,在子shell中将不可访问。
[root@localhost ~]# vim var1.sh#!/bin/bashvar1=aaaecho $var1~"var1.sh" 6L, 36C written[root@localhost ~]#[root@localhost ~]# sh var1.shaaa[root@localhost ~]# echo $var1[root@localhost ~]#
自定义环境变量
①使用export命令创建的环境变量可以在子shell中被访问。
[root@localhost ~]# vim var2.sh#!/bin/bashvar1=aaaecho $var1echo $var2~"var2.sh" 7L, 47C written[root@localhost ~]# export var2=bbb[root@localhost ~]# sh var2.shaaabbb
②全局环境变量可以在所有shell会话中被访问,通常在系统的配置文件中设置。
/etc/profile:为所有用户设置环境变量和shell配置。
/etc/bashrc:为bash shell设置环境变量和shell配置。
[root@localhost ~]# vim etc/profileexport MY_TEST_VAR="Hello, World!"[root@localhost ~]# source etc/profile[root@localhost ~]# echo $MY_TEST_VARHello, World!--新建shell会话[root@localhost ~]# echo $MY_TEST_VARHello, World!
2. 系统环境变量
系统环境变量是由操作系统设置的变量,它们提供了关于系统环境的信息,使用env可以查看系统中所有的环境变量。
[root@localhost ~]# envLS_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:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=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:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=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:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=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:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:SSH_CONNECTION=192.168.64.1 8399 192.168.64.129 22LANG=en_US.UTF-8HISTCONTROL=ignoredupsHOSTNAME=localhost.localdomainXDG_SESSION_ID=4USER=rootSELINUX_ROLE_REQUESTED=PWD=/rootSSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpassHOME=/rootSSH_CLIENT=192.168.64.1 8399 22SELINUX_LEVEL_REQUESTED=XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/shareMY_TEST_VAR=Hello, World!SSH_TTY=/dev/pts/1MAIL=/var/spool/mail/rootvar2=bbbTERM=vt100SHELL=/bin/bashSELINUX_USE_CURRENT_RANGE=SHLVL=1LOGNAME=rootDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/busXDG_RUNTIME_DIR=/run/user/0PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/binHISTSIZE=1000LESSOPEN=||/usr/bin/lesspipe.sh %s_=/usr/bin/env[root@localhost ~]# echo $HOME/root
3.特殊环境
$1:第一个参数
$#:参数的个数
$*:所有的参数
$@:所有的参数
$0:当前正在执行的脚本的名称
$$:当前Shell进程的进程ID(PID)
$!:上一个后台命令的PID
$?:上一个命令的退出状态
[root@localhost ~]# vim t3.sh#!/bin/bashecho "第一个参数:$1"echo "第三个参数:$3"echo "第二个参数:$2"echo "脚本名:$0"echo "参数的个数:$#"echo "所有的参数:$*"echo "所有的参数:$@"echo "当前Shell进程的进程ID:$$"echo "上一个后台命令的PID:$!"echo "上一个命令的退出状态:$?"[root@localhost ~]# sh t3.sh aa bb cc dd第一个参数:aa第三个参数:cc第二个参数:bb脚本名:t3.sh参数的个数:4所有的参数:aa bb cc dd所有的参数:aa bb cc dd当前Shell进程的进程ID:12241上一个后台命令的PID:上一个命令的退出状态:0
写在最后
Shell脚本中的变量是构建高效、灵活和强大自动化工具的基石,它们使得脚本能够适应多变的工作环境,处理复杂的数据,并实现精准的系统管理,从而在快速变化的技术领域中保持竞争力和效率。
关键词回复(可见相应文章):
oracle、mysql、pg、postgresql、sql、性能优化、故障处理、数据迁移、备份恢复、版本升级、补丁管理、深度巡检、解决方案、架构设计......

有任何问题或疑问,欢迎加V进群探讨哦~




