shell变量
自定义变量
set:查询当前系统所有的变量
-u 如果设定此选项,调用未声明的变量时会报错(默认无任何提示)
[root@localhost ~]# set
调用未声明的变量时,系统默认输出为空
[root@localhost ~]# echo $aa
[root@localhost ~]#
使用 -u 之后会提示错误信息
[root@localhost ~]# set -u
[root@localhost ~]# echo $aa
-bash: aa: 为绑定变量
[root@localhost ~]#
环境变量
有父shell与子shell之说 ,可以使用pstree
查看进程树
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─boltd───2*[{boltd}]
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─dnsmasq───dnsmasq
├─firewalld───{firewalld}
├─gdm─┬─X───9*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dc+
│ │ │ │ │ ├─ibus-engine-sim───2*[{ib+
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─32*[{gnome-shell}]
│ │ │ ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
│ │ │ ├─gsd-clipboard───2*[{gsd-clipboard}]
│ │ │ ├─gsd-color───3*[{gsd-color}]
│ │ │ ├─gsd-datetime───2*[{gsd-datetime}]
│ │ │ ├─gsd-housekeepin───2*[{gsd-housekeepin}]
│ │ │ ├─gsd-keyboard───3*[{gsd-keyboard}]
│ │ │ ├─gsd-media-keys───3*[{gsd-media-keys}]
│ │ │ ├─gsd-mouse───2*[{gsd-mouse}]
│ │ │ ├─gsd-power───3*[{gsd-power}]
│ │ │ ├─gsd-print-notif───2*[{gsd-print-notif}]
│ │ │ ├─gsd-rfkill───2*[{gsd-rfkill}]
│ │ │ ├─gsd-screensaver───2*[{gsd-screensaver}]
│ │ │ ├─gsd-sharing───3*[{gsd-sharing}]
│ │ │ ├─gsd-smartcard───4*[{gsd-smartcard}]
│ │ │ ├─gsd-sound───3*[{gsd-sound}]
│ │ │ ├─gsd-wacom───2*[{gsd-wacom}]
│ │ │ ├─gsd-xsettings───3*[{gsd-xsettings}]
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─gunicorn───gunicorn───{gunicorn}
├─ibus-portal───2*[{ibus-portal}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───16*[{libvirtd}]
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─nginx───9*[nginx]
├─packagekitd───2*[{packagekitd}]
├─php-fpm───5*[php-fpm]
├─polkitd───6*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─python───5*[{python}]
├─rngd
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─smbd─┬─cleanupd
│ ├─lpqd
│ └─smbd-notifyd
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─udisksd───4*[{udisksd}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
当前窗口就是父shell,输入 bash
就进入了子shell,可以使用pstree
查看进程树
├─sshd───sshd───bash───pstree
就是当前执行的 pstree
,一个 shell
,
[root@localhost ~]# bash
通过 pstree 查看到两个 bash
├─sshd───sshd───bash───bash───pstree
自定义变量在子 shell中是看不到的,而全局变量(环境变量)在子 shell 中是可以看到的
查看所有环境变量
[root@localhost ~]# env
查看 PATH 变量
[root@localhost ~]# echo $PATH
设置临时环境变量
[root@localhost ~]# echo "$PATH":/home
位置参数变量
$n: n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,10以上的参数需要用大括号包含,如 ${10}
$*: 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@: 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$#: 这个变量代表命令行中所有参数的个数
预定义变量
$? :最后一次执行的命令的返回状态,如果这个变量的值为0,证明一个命令正在执行,如果这个变量的值为非0,则说明上一次命令执行不正确
$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)
read接收键盘输入
read [选项] [变量名]
-p '提示信息‘ :在等待 read输入时,输出提示信息
-t 秒数:read 命令会一直等待永魂输入,使用此选项可以指定等待时间
-n 字符数:read命令只接受指定的字符数,就会执行
-s 隐藏输入的数据:适用于机密信息的输入
declare声明变量类型
declare [+/-][选项] 变量名
选项:
- -:给变量类型设定类型属性
- +:取消变量 的类型属性
- -a:将变量声明为数组型
- -i:将变量声明为整数型(integer)
- x:将变量声明为环境变量
- r:将变量声明为只读变量
- p:显示指定变量的被声明的类型(列出当前系统所有变量的类型)
1.计算两个变量的和
[root@localhost ~]# declare -i cc=$a+$b
2.定义一个数组
[root@localhost ~]# arr[0]=a
[root@localhost ~]# declare -a arr[1]=b
[root@localhost ~]# declare -a arr[1]=b
查看数组
[root@localhost ~]# echo ${arr[*]} 查看所有值
3.声明环境变量
[root@localhost ~]# declare -x test=123
查看一下 test
[root@localhost ~]# declare -p test
注意:declare -x test=123
和export
作用相似,但是其实是declare
命令的作用