1.什么是变量
一句话:变量即在程序运行过程中它的值是允许改变的量。
2.变量作用
1数据的存储格式
2参与的运算
3表示的数据范围
3.变量命名规则
1 命名要见名知意(命名的时候一定要注意,不能随便起用变量名,尽量不要出现像1,2,3,A,B等一些简单的字母或数字,一旦这个变量长时间不看,过来一段时间就不知当初为什么会定义这个变量了)
2 遵守命名规则(可以使用数字,下划线,字母作为命名,需要记住的是不能用数字作为变量名开头)
3 不能以程序中保留的字作为变量名(例如:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1)
4 使用“驼峰命名法”(小驼峰法:变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。大驼峰法:相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。)#小驼峰命名法
[root@localhost ~]# dateUserName=liaoxz
#大驼峰命名法
[root@localhost ~]# DataUserName=liaoxz
4.变量种类
(1)本地变量本地变量定义:
变量名=变量值[root@localhost ~]# user1=liaoxz变量调用
$变量名 ${变量名}#使用echo查看变量
[root@localhost ~]# echo $user1
liaoxz取消变量#语法:
unset 变量名
[root@localhost ~]# unset user1
[root@localhost ~]# user1
bash: user1: command not found...查看变量
export
env
printenv
set[root@localhost ~]# export
[root@localhost ~]# env
[root@localhost ~]# printenv
[root@localhost ~]# set本地变量的应用范围#定义完后在本地直接查看,是可以调用的
[root@localhost ~]# user1=liaoxz
[root@localhost ~]# echo $user1
liaoxz
[root@localhost ~]#
#新打开个终端再调用,没有查看到值
[root@localhost ~]# echo $user1
#下面以数状来查看下当前的进程
#pstree 进程查看工具,使用树状查看当前进程状态
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───{at-spi2-registr}
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─dnsmasq───dnsmasq
├─firewalld───{firewalld}
├─gdm─┬─Xorg
│ ├─gdm-session-wor─┬─gnome-session─┬─gnome-settings-───4*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-si+
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─6*[{gnome-shell}]
│ │ │ └─3*[{gnome-session}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─2*[gdm───2*[{gdm}]]
├─goa-daemon───3*[{goa-daemon}]
├─goa-identity-se───2*[{goa-identity-se}]
├─gssproxy───5*[{gssproxy}]
├─gvfs-afc-volume───2*[{gvfs-afc-volume}]
├─gvfs-goa-volume───{gvfs-goa-volume}
├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo}
├─gvfs-mtp-volume───{gvfs-mtp-volume}
├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
├─gvfsd───{gvfsd}
├─ibus-x11───2*[{ibus-x11}]
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─login───bash
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─mission-control───2*[{mission-control}]
├─packagekitd───2*[{packagekitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd─┬─sshd───bash───pstree#这是当前使用的bash
│ └─sshd───bash#这是我新开的一个连接终端,发现是新开启的一个bash。
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─udisksd───4*[{udisksd}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
└─wpa_supplicant
#切换一下当前shell再使用echo查看变量
[root@localhost ~]# csh
[root@localhost ~]# echo $user1
user1: Undefined variable.
#切换shell后不能查看变量
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───{at-spi2-registr}
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─dnsmasq───dnsmasq
├─firewalld───{firewalld}
├─gdm─┬─Xorg
│ ├─gdm-session-wor─┬─gnome-session─┬─gnome-settings-───4*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-si+
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─6*[{gnome-shell}]
│ │ │ └─3*[{gnome-session}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─2*[gdm───2*[{gdm}]]
├─goa-daemon───3*[{goa-daemon}]
├─goa-identity-se───2*[{goa-identity-se}]
├─gssproxy───5*[{gssproxy}]
├─gvfs-afc-volume───2*[{gvfs-afc-volume}]
├─gvfs-goa-volume───{gvfs-goa-volume}
├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo}
├─gvfs-mtp-volume───{gvfs-mtp-volume}
├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
├─gvfsd───{gvfsd}
├─ibus-x11───2*[{ibus-x11}]
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─login───bash
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─mission-control───2*[{mission-control}]
├─packagekitd───2*[{packagekitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd─┬─sshd───bash───csh───pstree#新开的csh是属于bash子shell
│ └─sshd───bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─udisksd───4*[{udisksd}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
└─wpa_supplicant
总结:本地变量只作用于当前的shell,在子shell进程和其他shell进程不生效,在当前shell终止的时候这个变量也就结束了他的使命。
(2)环境变量环境变量赋值
export 变量名=值
declare -x 变量名=值[root@localhost ~]# declare user2=lxz
[root@localhost ~]# export user1=liaoxz变量调用
$变量名 ${变量名}[root@localhost ~]# echo $user1
liaoxz
[root@localhost ~]# echo $user2
lxz
[root@localhost ~]#
取消变量
unset 变量名[root@localhost ~]# unset user1
[root@localhost ~]# user1
b查看变量
export
env
printenv
set[root@localhost ~]# export |grep user1
declare -x user1="liaoxz"
[root@localhost ~]# env
[root@localhost ~]# printenv
[root@localhost ~]# set环境变量的应用范围#在当前shell为bash定义一个环境变量
[root@localhost ~]#pstree
├─sshd─┬─sshd───bash───pstree
│ └─sshd───bash
[root@localhost ~]# export user1=liaoxz
[root@localhost ~]# echo $user1
liaoxz
#在当前shell能查看,我再在此shell下新开一个子bash shell
[root@localhost ~]#bash
[root@localhost ~]#pstree
├─sshd─┬─sshd───bash───bash───pstree#在当前shell下新开了一个bash新进程
│ └─sshd───bash
[root@localhost ~]# echo $user1
liaoxz
#使用echo可查看
[root@localhost ~]# echo $user1
#在新开的终端中用echo查看不了
总结:环境变量应用于当前shell和其所有子shell,因为新开的终端是属于新的shell,所以,不是同一个父shell是不能作用的。
(3)只读变量-常量只读变量赋值
declare -r 变量名=值
readonly 变量名=值变量调用
$变量名 ${变量名}
查看变量
export
env
printenv
set只读变量的应用范围#只读不能删不能改程序退出不在生效
[root@localhost ~]# readonly user4=ll
[root@localhost ~]# echo $user4
ll
[root@localhost ~]# unset user4
bash: unset: user4: cannot unset: readonly variable
#默认作用于当前shell,可以使用和环境比那里一起使用,作用与当前shell及其子shell
(4)位置变量位置变量定义#位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1:对应第1参数,数字自定义,数字几就是第几参数
$0: 命令本身
$*: 传递给脚本的所有参数,全部参数合为一个字符串
$@: 传递给脚本的所有参数,每个参数为独立字符串
$#: 传递给脚本的参数的个数
$@ $* 只在被双引号包起来的时候才会有差异
#实例证明在后续【bash脚本用法】上传博客后指定链接