介绍
在本实验中,你将学习如何在 Linux 中使用 set 命令来管理 shell 变量和选项。实验内容包括理解 set 命令的用途和语法、修改 shell 变量以及管理环境变量。set 命令是一个强大的工具,用于配置和自定义 shell 环境,本实验提供的实际示例将帮助你熟练掌握其用法。
在本实验中,你将学习如何在 Linux 中使用 set 命令来管理 shell 变量和选项。实验内容包括理解 set 命令的用途和语法、修改 shell 变量以及管理环境变量。set 命令是一个强大的工具,用于配置和自定义 shell 环境,本实验提供的实际示例将帮助你熟练掌握其用法。
set 命令的用途和语法在这一步中,你将学习 Linux 中 set 命令的用途和语法。set 命令用于设置、取消设置以及显示 shell 变量和选项。
首先,让我们来探索 set 命令的语法:
set [option] [variable[=value]]
在这里,option 表示可以与 set 命令一起使用的各种选项,而 variable[=value] 表示你想要设置或取消设置的 shell 变量。
一些常用的 set 命令选项包括:
-a:自动标记被修改或创建的变量,以便将其导出到后续命令的环境中。-e:如果命令以非零状态退出,则立即退出。-u:在替换时,将未设置的变量视为错误。-x:在执行时打印命令及其参数。要显示当前设置的所有 shell 变量,你可以直接运行不带任何参数的 set 命令:
set
示例输出:
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="1" [2]="4" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='5.1.4(1)-release'
COLUMNS=80
COMP_WORDBREAKS=$' \t\n"\'><=;|&(:'
DIRSTACK=()
EUID=1000
GROUPS=()
HISTCONTROL=ignoreboth
HISTFILE=/home/labex/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/labex
HOSTNAME=8d5d8d1f0a3f
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LINES=24
LOGNAME=labex
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=00: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=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
MACHTYPE=x86_64-pc-linux-gnu
MAILCHECK=60
OLDPWD=/home/labex
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PIPESTATUS=([0]="0")
PPID=1
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/labex/project
RANDOM=1836
READLINE_LINE=
READLINE_POINT=0
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments:progcomp
SHLVL=1
SSH_CLIENT='172.17.0.1 52390 22'
SSH_CONNECTION='172.17.0.1 52390 172.17.0.2 22'
SSH_TTY=/dev/pts/0
TERM=xterm-256color
UID=1000
UPTIME_DAYS=0
UPTIME_HOURS=0
UPTIME_MINUTES=2
UPTIME_SECONDS=123
USER=labex
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_ID=1
_=/usr/bin/env
如你所见,set 命令显示了当前设置的所有 shell 变量,包括环境变量和 shell 选项。
现在,让我们来探索如何使用 set 命令来管理 shell 变量和选项。
set 命令修改 Shell 变量在这一步中,你将学习如何使用 set 命令修改 shell 变量。
首先,让我们创建一个新的 shell 变量:
set MYVAR="Hello, World!"
现在,让我们验证变量是否已正确创建:
echo $MYVAR
示例输出:
Hello, World!
你也可以使用 set 命令修改现有 shell 变量的值:
MYVAR="Goodbye, World!"
set MYVAR
示例输出:
MYVAR="Goodbye, World!"
要取消设置 shell 变量,你可以使用 set 命令的 -u 选项:
set -u MYVAR
echo $MYVAR
示例输出:
bash: MYVAR: unbound variable
如你所见,MYVAR 变量现在已被取消设置,尝试访问它会引发错误。
最后,让我们探索如何使用 -a 选项将 shell 变量设置为只读:
set -a READONLY_VAR="This variable is read-only"
READONLY_VAR="New value"
示例输出:
bash: READONLY_VAR: readonly variable
在这个例子中,我们将 READONLY_VAR 变量设置为只读,尝试修改其值会引发错误。
set 命令管理环境变量在这一步中,你将学习如何使用 set 命令管理环境变量。
环境变量是一种特殊类型的 shell 变量,系统中所有运行的进程都可以访问它们。它们通常用于存储配置设置、路径和其他重要信息。
让我们首先显示当前的环境变量:
set -o | grep -E '^[a-Z_]+='
示例输出:
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
HISTCONTROL=ignoreboth
HISTFILE=/home/labex/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/labex
HOSTNAME=8d5d8d1f0a3f
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LOGNAME=labex
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=00: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=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
MACHTYPE=x86_64-pc-linux-gnu
MAILCHECK=60
OLDPWD=/home/labex
OPTERR=1
OPTIND=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PIPESTATUS=([0]="0")
PPID=1
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/labex/project
RANDOM=1836
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments:progcomp
SHLVL=1
SSH_CLIENT='172.17.0.1 52390 22'
SSH_CONNECTION='172.17.0.1 52390 172.17.0.2 22'
SSH_TTY=/dev/pts/0
TERM=xterm-256color
UID=1000
USER=labex
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_ID=1
_=/usr/bin/env
如你所见,输出中包含了当前系统中设置的所有环境变量。
现在,让我们创建一个新的环境变量:
export MYENV_VAR="This is an environment variable"
为了验证变量是否已正确创建,我们可以使用 echo 命令:
echo $MYENV_VAR
示例输出:
This is an environment variable
要将环境变量设置为只读,你可以使用 readonly 命令:
readonly READONLY_ENV_VAR="This variable is read-only"
READONLY_ENV_VAR="New value"
示例输出:
bash: READONLY_ENV_VAR: readonly variable
如你所见,尝试修改 READONLY_ENV_VAR 变量会引发错误。
在本实验中,你学习了 Linux 中 set 命令的用途和语法。set 命令用于设置、取消设置以及显示 shell 变量和选项。你探索了可以与 set 命令一起使用的各种选项,例如 -a、-e、-u 和 -x,以及如何通过运行不带任何参数的 set 命令来显示当前设置的所有 shell 变量。
你还学习了如何使用 set 命令管理环境变量,这使你可以修改 shell 变量并控制它们在 shell 环境中的行为。