shell之变量

2019-05-27  本文已影响0人  IT小池

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 [+/-][选项] 变量名
选项:

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=123export作用相似,但是其实是declare命令的作用

上一篇 下一篇

猜你喜欢

热点阅读