set -o emacs
##切到emacs模式
set -o vi
##切到vi模式
set -o
## 查看当前选项的设置状态
allexport off
braceexpand on
emacs on
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
快捷键 | 快捷键说明 |
---|---|
CTRL-A | 将光标移到行首(在命令行下) |
CTRL-B | 退格 (非破坏性的),这个只是将光标位置往回移动一个位置。 |
CTRL-C | 中断,终结一个前台作业。 |
CTRL-D | “EOF” (文件结尾:end of file)。它用于表示标准输入(stdin)的结束。在控制台或xterm 窗口输入文本时,CTRL-D 删除在光标下的字符。从一个shell中退出 (类似于exit)。如果没有字符存在,CTRL-D 则会登出该会话。在一个xterm窗口中,则会产生关闭此窗口的效果。 |
CTRL-E | 将光标移动到行尾(在命令行下) |
CTRL-F | 将光标向前移动一个字符(在命令行下) |
CTRL-G | BEL。在一些老式打印机终端上,这会引发一个响铃。在xterm终端上可能是哔的一声。 |
CTRL-H | 擦除(Rubout)(破坏性的退格)。在光标往回移动的时候,同时擦除光标前的一个字符。 |
CTRL-I | 水平制表符。 |
CTRL-J | 新行(换行[line feed]并到行首)。在脚本中,也可能表示为八进制形式(‘/012′)或十六进制形式(‘/x0a’)。 |
CTRL-K | 垂直制表符(Vertical tab)。在控制台或 xterm 窗口输入文本时,CTRL-K会删除从光标所在处到行尾的所有字符。在脚本中,也可能表示为八进制形式(‘/013′)或十六进制形式(‘/x0b’)。在脚本中,CTRL-K可能会有不一样的行为,下面的例子给出其不一样的行为:#!/bin/bash ## 一个CTRL-K垂直制表符的例子 var=$'/x0aBottom Line/x0bTop line/x0a' ## 直接输出 echo "$var" ## 使用col来过滤控制字符 echo "$var" | col ## 上面的显示将会不一样 exit 0 |
CTRL-L | 跳纸,换页(Formfeed),清屏。清空终端屏幕。在终端上,这个命令的作用和clear命令一样。但当这个命令发送到打印机时,Ctrl-L会直接跳到纸张(Paper sheet)的末尾。 |
CTRL-M | 回车(Carriage return)。 |
CTRL-N | 擦除从history缓冲区召回的一行文本(在命令行下)。如果当前输入是历史记录中选择的时候,这个是从这个历史记录开始,每按一次,是更接近的一条命令。 |
CTRL-O | 产生一个新行(在命令行下)。 |
CTRL-P | 从history缓冲区召回上一次的命令(在命令行下)。此快捷键召回的顺序是由近及远的召回,即按一次,召回的是前一次的命令,再按一次,是召回上一次之前的命令,这和CTRL-N都是以当前的输入为起点,但是两个命令操作刚好相反,CTRL-N是从起点开始由远及近(如果起点是历史命令的话)。 |
CTRL-Q | Resume (XON)。恢复/解冻,这个命令是恢复终端的stdin用的,可参见CTRL-S。 |
CTRL-R | 回溯搜索(Backwards search)history缓冲区内的文本(在命令行下)。注意:按下之后,提示符会变成(reverse-i-search)”:输入的搜索内容出现在单引号内,同时冒号后面出现最近最匹配的历史命令。 |
CTRL-S | Suspend(XOFF),挂起。这个是冻结终端的stdin。要恢复可以按CTRL-Q。 |
CTRL-T | 交换光标位置与光标的前一个位置的字符内容(在命令行下)。比如:echo $var;,假设光标在a上,那么,按下C-T之后,v和a将会交换位置:echo $avr;。 |
CTRL-U | 擦除从光标位置开始到行首的所有字符内容。在某些设置下,CTRL-U会不以光标位置为参考而删除整行的输入。 |
CTRL-V | 在输入文本的时候,按下C-V之后,可以插入控制字符。比如:echo -e '/x0a’;和echo ;这两种效果一样。这点功能在文本编辑器内非常有效。 |
CTRL-W | 当在控制台或一个xterm窗口敲入文本时, CTRL-W 会删除从在光标处往后(回)的第一个空白符之间的内容。在某些设置里, CTRL-W 删除光标往后(回)到第一个非文字和数字之间的字符。 |
CTRL-X | 在某些文字处理程序中,这个控制字符将会剪切高亮的文本并且将它复制到剪贴板中。 |
CTRL-Y | 将之前已经清除的文本粘贴回来(主要针对CTRL-U或CTRL-W)。 |
CTRL-Z | 暂停一个前台的作业;在某些文本处理程序中也作为替换操作;在MSDOS文件系统中作为EOF(End-of-file)字符。 |
CTRL-/ | 退出。和CTRL-C差不多,也可能dump一个”core”文件到你的工作目录下(这个文件可能对你没用)。 |
CTRL-/ | 撤消操作,Undo。 |
CTRL-_ | 撤消操作。 |
CTRL-xx | 在行首和光标两个位置间进行切换,此处是两个”x”字符。 |
ALT-B | 光标往回跳一个词,词以非字母为界(跳动到当前光标所在词的开头)。 |
ALT-F | 光标往前跳一个词(移动到光标所在词的末尾)。 |
ALT-D | 删除光标所在位置到光标所在词的结尾位置的所有内容(如果光标是在词开头,则删除整个词)。 |
ALT-BASKSPACE | 删除光标所在位置到词开头的所有内容。 |
ALT-C | 将光标所在位置的字母转为大写(如果光标在一个词的起始位置或之前,则词首字母大写)。 |
ALT-U | 将光标所在位置到词尾的所有字母转为大写。 |
ALT-L | 将光标位置到词尾的所有字母转为小写。 |
ALT-R | 取消所有变更,并将当前行恢复到在历史记录中的原始状态(前提是当前命令是从历史记录中来的,如果是手动输入,则会清空行)。 |
ALT-T | 当光标两侧都存在词的时候,交换光标两侧词的位置。如:abc bcd -> bcd abc |
ALT-. | 使用前一次命令的最后一个词(命令本身也是一个词,参见后一篇的Bang命令中的词指示符概念)。 |
ALT-_ | 同ALT-.。 |
ALT-数值 | 这个数值可以是正或者是负,这个键单独没有作用,必须后面再接其他内容,如果后面是字符,则表示重复次数。如:[ALT-10,k]则光标位置会插入10个k字符(负值在这种情况下无效);如果后面接的是命令,则数字会影响后面命令的执行结果,如:[ALT–10,CTRL-D]则向CTRL-D默认方向相反(负数)的方向执行10次操作。 |
ALT-< | 移动到历史记录中的第一行命令。 |
ALT-> | 移动到历史的最后一行,即当前正在输入的行(没有输入的情况下为空)。 |
ALT-P | 从当前行开始向前搜索,有必要则向”上”移动,移动时,使用非增量搜索查找用户提供的字符串。 |
ALT-N | 从当前行开始向后搜索,如果有必要向”下”移动,移动时,使用非增量搜索查找用户提供的字符串。 |
ALT-CTRL-Y | 在标志点上插入前一个命令的第一个参数(一般是前一行的第二个词)。如果有参数n,则插入前一个命令的第n个词(前一行的词编号从0开始,见历史扩展)。负的参数将插入冲前一个命令的结尾开始的第n个词。参数n通过M-No.的方式传递,如:[ALT-0,ALT-CTRL-Y]插入前一个命令的第0个词(命令本身)。 |
ALT-Y | 轮询到删除环,并复制新的顶端文本。只能在yank[CTRL-Y]或者yank-pop[M-Y]之后使用这个命令。 |
ALT-? | 列出能够补全标志点前的条目。 |
ALT-* | 把能够补全[ALT-?]命令能生成的所有文本条目插入到标志点前。 |
ALT-/ | 试图对标志点前的文本进行文件名补全。[CTRL-X,/]把标志点前的文本当成文件名并列出可以补全的条目。 |
ALT-~ | 把标志点前的文本当成用户名并试图进行补全。[CTRL-X,~]列出可以作为用户名补全标志点前的条目。 |
ALT-$ | 把标志点前的文本当成Shell变量并试图进行补全。[CTRL-X,$]列出可以作为变量补全标志点前的条目。 |
ALT-@ | 把标志点前的文本当成主机名并试图进行补全。[CTRL-X,@]列出可以作为主机补全标志点前的条目。 |
ALT-! | 把标志点前的文本当成命令名并试图进行补全。进行命令名补全时会依次使用别名、保留字、Shell函数、shell内部命令,最后是可执行文件名。[CTRL-X,!]把标志点前的文本当成命令名并列出可补全的条目。 |
ALT-TAB | 把标志点前的文本与历史记录中的文本进行比较以寻找匹配的并试图进行补全。 |
ALT-{ | 进行文件名补全,把可以补全的条目列表放在大括号之间,让shell可以使用。 |
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
类型 | 符号 | 作用 |
---|---|---|
标准正确(错误)输出重定向 | 命令>文件 | 以覆盖的方式把正确(错误)命令的输出输出到指定的文件或设备中。 |
标准正确(错误)输出重定向 | 命令>>文件 | 以追加的方式把正确(错误)命令的输出输出到指定的文件或设备中。 |
正确和错误输出同时保存 | 命令>文件 2>&1 | 以覆盖的方式把正确和错误命令的输出输出到指定的文件或设备中。 |
正确和错误输出同时保存 | 命令>文件 2>>&1 | 以追加的方式把正确和错误命令的输出输出到指定的文件或设备中。 |
正确和错误输出同时保存 | 命令 &>文件 | 以覆盖的方式把正确和错误命令的输出输出到指定的文件或设备中。 |
正确和错误输出同时保存 | 命令 &>>文件 | 以追加的方式把正确和错误命令的输出输出到指定的文件或设备中。 |
正确和错误输出同时保存 | 命令>>文件1 2>>文件2 | 把正确的输出追加到文件1,把错误的输出追加到文件2 |
wc命令
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
wc [选项] [文件名]
-c 统计字节数
-w 统计单词书
-l 统计行数
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没无逻辑关系 |
&& | 命令1 && 命令2 | 当命令1正确执行时命令2才会执行 |
|| | 命令1||命令2 | 当命令1执行不正确时命令2才会执行 |
命令格式:命令1|命令2,即命令1的正确输出作为命令2的操作对象 。
#查询本地所有网络连接,提取包含'ESTABLISHED'(已建立连接的行)
[root@localhost ~]# netstat -an |grep 'ESTABLISHED'
tcp 0 0 10.10.19.6:22 10.10.19.88:50857 ESTABLISHED
tcp 0 64 10.10.19.6:22 10.10.19.88:63076 ESTABLISHED
[root@localhost ~]#
#使用wc统计行数
[root@localhost ~]# netstat -an |grep 'ESTABLISHED' | wc -l
2
通配符 | 作用 |
---|---|
? | 匹配任意一个字符 |
* | 匹配0个或者多个任意字符 |
[] | 匹配括号中任意一个字符,例如[abcde],可以匹配a、b、c、d、任意一个字符 |
[a-z] | -代表一个范围,括号中的范围为a-z匹配改范围内任意一个字符 |
[^0-9] | ^逻辑非,标识匹配不是括号内的任意一个字符 |
符号 | 作用 |
---|---|
’ ’ | 单引号,在单引号内的特殊符号都没有特殊含义 |
“ ” | 双引号,在单引号内的特殊符号都没有特殊含义,但是$、· 、\例外。 |
· · | 反引号,反引号括起来的内容是系统命令,在Bash中会先执行,和 ( ) 作 用 一 直 , 不 过 推 荐 使 用 ()作用一直,不过推荐使用 ()作用一直,不过推荐使用() |
$() | 和反引号的作用一样用来引用系统命令 |
() | 用于一串命令的执行,()中的命令会在子shell中执行 |
{} | 用于一串命令执行时,{}中的命令会在当前shell执行,也可以用于变量变形与替换 |
[] | 用于变量测试 |
# | 注释 |
$ | 用于调用变量的值,例如$a |
\ | 转义字符 |
[root@localhost ~]#a="hello world"
#变量名=“变量值”
[root@localhost ~]# echo $a
hello world
set [选项]
-u 如设定此项,调用为生命变量时会报错(默认无任何提示)
-x 如设定此项,在命令执行前会把命令先输出一次
[root@localhost ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=168
CVS_RSH=ssh
DIRSTACK=()
DISPLAY=localhost:11.0
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=localhost.localdomain
HOSTTYPE=x86_64
ID=0
IFS=$' \t\n'
LANG=zh_CN.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=39
LOGNAME=root
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=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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=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:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:'
MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=5867
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/root
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
QTLIB=/usr/lib64/qt-3.3/lib
SELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=
SELINUX_USE_CURRENT_RANGE=
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='10.10.19.88 63076 22'
SSH_CONNECTION='10.10.19.88 63076 10.10.19.6 22'
SSH_TTY=/dev/pts/1
TERM=xterm
UID=0
USER=root
_=world
a='hello world'
colors=/etc/DIR_COLORS
unset 变量名
[root@localhost ~]# unset a
[root@localhost ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=168
CVS_RSH=ssh
DIRSTACK=()
DISPLAY=localhost:11.0
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=localhost.localdomain
HOSTTYPE=x86_64
ID=0
IFS=$' \t\n'
LANG=zh_CN.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=39
LOGNAME=root
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=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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=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:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:'
MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=5867
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/root
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
QTLIB=/usr/lib64/qt-3.3/lib
SELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=
SELINUX_USE_CURRENT_RANGE=
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='10.10.19.88 63076 22'
SSH_CONNECTION='10.10.19.88 63076 10.10.19.6 22'
SSH_TTY=/dev/pts/1
TERM=xterm
UID=0
USER=root
_=a
colors=/etc/DIR_COLORS
环境变量的设置
#使用export声明环境变量
#export 变量名=变量值
[root@localhost ~]# export age="18"
环境变量的查询和删除
查询环境变量:
env和set命令的区别:set命令可以查看所有的变量,env命令只能查看环境变量
[root@localhost ~]# env
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.10.19.88 63076 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/1
USER=root
...
age=18
...
删除环境变量:
删除环境变量与删除用户变量相同均使用unset。
[root@localhost ~]# unset age
系统默认环境变量
[root@localhost ~]# env
HOSTNAME=localhost.localdomain #主机名
SELINUX_ROLE_REQUESTED=
TERM=xterm #终端环境
SHELL=/bin/bash #当前sehll
HISTSIZE=1000 #历史命令条数
SSH_CLIENT=10.10.19.88 63076 22 #当前ssh客户端IP
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3 #QT
QTINC=/usr/lib64/qt-3.3/include #QT
SSH_TTY=/dev/pts/1 #ssh连接的中断时pts/1
USER=root #当前登录的用户
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=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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=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:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: #定义颜色显示
MAIL=/var/spool/mail/root #用户邮箱
PATH=/usr/lib64/qt- 3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #系统查找命令的路径
PWD=/root #当前用户所在目录
LANG=zh_CN.UTF-8 #操作系统的语言
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1 #当前在第一层子shell中
HOME=/root
LOGNAME=root #当前登录的用户
QTLIB=/usr/lib64/qt-3.3/lib #QT
CVS_RSH=ssh
SSH_CONNECTION=10.10.19.88 63076 10.10.19.6 22 #ssh连接信息
LESSOPEN=||/usr/bin/lesspipe.sh %s
DISPLAY=localhost:11.0
G_BROKEN_FILENAMES=1
_=/bin/env
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tk2Jci5t-1592488239138)(.\images\000\1592467603932.png)]
/etc/profile环境变量会在用户登录过程中先调用,在这个环境变种配置文件中会定义以下默认环境变量:
环境变量名 | 用途 |
---|---|
USER | 根据登录用户进行赋值,代表当前用户 |
LOGNAME | 根据USER变量的值给这个变量赋值 |
根据登录的用户定义用户的邮箱为/var/spool/mail/用户名 | |
PATH | 根据登录用户的UID是否为0,判断PATH变量是否包含/sbin,/usr/sbin,/usr/local/sbin这三个系统命令目录 |
HOSTNAME | 根据主机名给这个变量赋值 |
HISTSIZE | 定义历史命令的保存条数 |
umask | 定义umask默认权限,/etc/profile中的umask全显示在有用户登录过程也就是输入了用户名和密码时才生效。 |
/etc/profile.d/*.sh | 调用/etc/profile.d目录下所有.sh结尾的文件 |
被/etc/profile调用
被/etc/profile调用
被~/.bash_profile调用
被~/.bash_profile调用
用途 | 存放位置 |
---|---|
对所有用户生效 | /etc/profile |
仅对自己生效 | /.bash_profile或./bashrc |
在用户退出登录时,只会调用一个环境变量配置文件~/.bash_logout。这个配置文件默认为空,如果我们需要在退出登录时执行一些操作,比如清理历史命令、备份数据等就可以把命令写入这个配置文件。
例如~/bash_history文件,用于保存历史命令。
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1- 9 代 表 命 令 后 第 一 个 到 第 九 个 参 数 , 10 以 上 的 参 数 需 要 用 大 括 号 括 起 来 , 如 9代表命令后第一个到第九个参数,10以上的参数需要用大括号括起来,如 9代表命令后第一个到第九个参数,10以上的参数需要用大括号括起来,如{10} |
$* | 代表命令中所有的参数,$*是把所有的参数看成一个整体 |
$@ | 代表命令中所有的参数,与 ∗ 不 同 的 是 *不同的是 ∗不同的是@会把每个参数区分对待 |
$# | 代表命令行中所有参数的个数 |
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令返回状态,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确。 |
$$ | 当前进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
优先级 | 运算符 | 说明 |
---|---|---|
13 | -,+ | 单目负,单目正 |
12 | !,~ | 逻辑非,按位取反或补码 |
11 | *,/,% | 乘、除、取模 |
10 | +,- | 加、减 |
9 | <<,>> | 按位左移,按位右移 |
8 | <=,>=,<,> | 小于等于,大于等于,小于,大于 |
7 | ==,!= | 等于,不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= | 赋值、预算且赋值 |
使用declare声明变量类型
我们之前已经说过了,默认情况下对变量的赋值都是字符串类型,想要进行变量的运算,首先需要声明变量的类型。
declare [+/-] [选项] 变量名
+/- "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
-a 将变量声明为数组类型
-f 仅显示函数。
-r 将变量设置为只读。
-x 指定的变量会成为环境变量,可供shell以外的程序来使用。
-i [设置值]可以是数值,字符串或运算式。
-x 将变量声明为环境变量
-p 显示置顶变量的类型
[root@localhost disk_lv]# declare -p aa
declare -- aa="10" #字符串
[root@localhost disk_lv]# declare -p bb
declare -- bb="20" #字符串
[root@localhost disk_lv]# declare -i cc=$aa+$bb #声明为整数型
[root@localhost disk_lv]# echo $cc
30
使用expr和let数值运算工具
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
expr 表达式
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
let arg [arg ...] #arg:要执行的表达式
[root@localhost disk_lv]# dd=$(expr $aa + $bb)&&echo $dd
30
#注意,“+”号的左右两侧必须有空格否则不运算
[root@localhost disk_lv]# let ee=$aa+$bb&&echo $ee
30
[root@localhost disk_lv]# n=30
[root@localhost disk_lv]# let n+=10 && echo $n
40
#推荐使用let
使用 ( ( 运 算 式 ) ) 或 ((运算式))或 ((运算式))或[运算式]方式运算
[root@localhost disk_lv]# ff=$(($aa+$bb)) && echo $ff
30
[root@localhost disk_lv]# gg=$[$aa+$bb] && echo $gg
30
变量置换 | 变量y没有设置 | 变量y为空 | 变量y设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x为空 | x=新值 | x=新值 |
x=${y:+新值} | x为空 | x为空 | x=新值 |
x=${y=新值} | x=新值,y=新值 | x为空,y=新值 | x=$y,y值不变 |
x=${y:=新值} | x=新值,y=新值 | x=新值,y=新值 | x=新值,y=新值 |
x=$[y?新值] | 新值输出到标准错误输出 | x为空 | x=$y |
x=$[y:?新值] | 新值输出到标准错误输出 | 新值输出到标准错误输出 | x=$y |
/etc/issue
用途为在本地终端登录时显示欢迎信息。
转义符 | 作用 |
---|---|
\d | 显示当前系统日期 |
\s | 显示操作系统名称 |
\l | 显示登录的终端号 |
\m | 显示硬件体系结构 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登录用户的序列号 |
[root@localhost disk_lv]# cat /etc/issue
CentOS release 6.7 (Final)
Kernel \r on an \m
当前日期:\d
当前时间:\t
操作系统名称:\s
终端号:\l
硬件体系:\m
主机名:\n
域名:\o
内核版本:\r
用户序列号:\u
当前使用本地终端登录!
/etc/issue.net
用途为在远程登录时显示欢迎信息。
注意:转义符在/etc/motd中不生效.
[root@localhost disk_lv]# cat /etc/issue.net
CentOS release 6.7 (Final)
Kernel \r on an \m
当前使用远程终端登录!
#如需在ssh远程登录时可以看到/etc/issue.net的欢迎信息,需要修改ssh的配置文件/etc/ssh/sshd_config
[root@localhost disk_lv]# cat /etc/ssh/sshd_config |grep Banner
Banner /etc/issue.net
#重启ssh
[root@localhost disk_lv]# /etc/init.d/sshd restart
停止 sshd: [确定]
正在启动 sshd: [确定]
/etc/motd
用途为在用户输入用户名和密码正确登录之后显示欢迎信息。不论是本地登录还是远程登录都可以显示
注意:转义符在/etc/motd中不生效.
[root@localhost disk_lv]# vi /etc/motd
[root@localhost disk_lv]# cat /etc/motd
登录成功,欢迎您!
当前欢迎信息由/etc/motd配置!