**范例12-13:**eval命令与单引号的特殊用法。
[root@centos7 ~]# echo `hostname -I` #想要在引号里面执行命令,需要用到反引号,也称为倒引号。
10.0.0.201 10.0.0.2
[root@centos7 ~]# echo '`hostname -I`' #倒引号外层套单引号,单引号的作用是所见即所得,所以结果是`hostname -I`。
`hostname -I`
[root@centos7 ~]# eval echo '`hostname -I`' #命令开头加一个eval命令,单引号失效了!因为evel命令可以优先解析或执行单引号内的变量或命令。
10.0.0.201 10.0.0.2
**范例12-14:**退出Shell命令行。
[root@centos7 ~]# exit #退出Shell命令行可以使用exit命令,也可以使用Ctrl+d快捷键或logout命令。
logout
**范例12-15:**退出脚本。
[root@centos7 ~]# cp break.sh exit.sh
[root@centos7 ~]# vim exit.sh
#!/bin/bash
for((i=0;i<=5;i++))
do
if [ $i -eq 3 ] ;then
exit #一旦执行exit命令就会退出真个脚本,剩余的脚本内容也不会再执行。
fi
echo $i
done
echo "ok"
:wq
脚本执行的结果如下:
[root@centos7 ~]# bash exit.sh
0
1
2
【功能说明】
export命令用于查看或设置全局变量。
【语法格式】
export [选项]
【选项说明】
表12-3针对该命令的参数选项进行了说明。
表12-3 export命令的参数选项及说明

【使用范例】
**范例12-16:**查看全局变量。
[root@centos7 ~]# export -p #使用-p选项打印所有环境变量。
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="centos7"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x 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:*.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:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=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:*.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:*.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:*.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:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SELINUX_LEVEL_REQUESTED=""
declare -x SELINUX_ROLE_REQUESTED=""
declare -x SELINUX_USE_CURRENT_RANGE=""
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="10.0.0.1 50943 22"
declare -x SSH_CONNECTION="10.0.0.1 50943 10.0.0.201 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="linux"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="35"
**范例12-17:**设置全局变量。
[root@centos7 ~]# export MYENV=7 #只有使用export命令设置的变量才是全局变量。
[root@centos7 ~]# export -p |grep MYENV
declare -x MYENV="7"
【功能说明】
history命令用于查看所有执行命令的历史记录。
【语法格式】
history [选项]
【选项说明】
表12-4针对该命令的参数选项进行了说明。
表12-4 history命令的参数选项及说明

【使用范例】
**范例12-18:**查看命令的历史记录。
[root@centos7 ~]# history #显示命令的所有历史记录。
1 ip addr
2 ping www.baidu.com
3 nmtui
4 systectl restart network
5 systemctl restart network
...
809 bash exit.sh
810 export -p
811 export MYENV=7
812 export -p |grep MYENV
813 history
范例12-19:查看命令的最近10条历史记录。
[root@centos7 ~]# history 10 #history命令接上数字n表示限制最近n条命令记录。
805 eval echo '`hostname -I`'
806 exit
807 cp break.sh exit.sh
808 vim exit.sh
809 bash exit.sh
810 export -p
811 export MYENV=7
812 export -p |grep MYENV
813 history
814 history 10
**范例12-20:**删除指定命令的历史记录。
[root@centos7 ~]# history |tail
806 exit
807 cp break.sh exit.sh
808 vim exit.sh
809 bash exit.sh
810 export -p
811 export MYENV=7
812 export -p |grep MYENV
813 history
814 history 10
815 history |tail
[root@centos7 ~]# history -d 810 #“history -d 历史命令序号”可以清楚指定序号的历史记录命令。
[root@centos7 ~]# history |tail
807 cp break.sh exit.sh
808 vim exit.sh
809 bash exit.sh
810 export MYENV=7
811 export -p |grep MYENV
812 history
813 history 10
814 history |tail
815 history -d 810
816 history |tail
**范例12-21:**清楚所有的历史记录。
[root@centos7 ~]# history -c #使用-c选项清楚所有命令的历史记录。
[root@centos7 ~]# history
1 history
【功能说明】
read命令会从标准输入中读取一行,并把输入行的每个字段的值都指定给Shell变量。
【语法格式】
read [选项] [变量名]
【选项说明】
表12-5针对该命令的参数选项进行了说明。
表12-5 read命令的参数选项及说明

【使用范例】
**范例12-22:**通过read命令交互式赋值变量。
[root@centos7 ~]# read #执行命令read,此时命令行等待输入。
neteagle #输入字符串。
[root@centos7 ~]# echo $REPLY #read得到的输入默认存储在变量REPLY中。
neteagle
[root@centos7 ~]# read one #read后面接一个变量名,则输入的数据就会赋值给这个变量。
01
[root@centos7 ~]# echo $one
01
[root@centos7 ~]# read one two #read后面可以接上多个变量名。
n1 n2 #默认以空格作为分隔符,第一段n1赋值给第一个变量one,第二段n2赋值给第二个变量two。
[root@centos7 ~]# echo $one
n1
[root@centos7 ~]# echo $two
n2
[root@centos7 ~]# read one two
m1 m2 m3 #若果输入的数据超过了变量的个数,那么最后所有的值都赋值给最后一个变量,m1赋值给变量one,“m2 m3”一起赋值给变量two。
[root@centos7 ~]# echo $one
m1
[root@centos7 ~]# echo $two
m2 m3
**范例12-23:**输出提示语句。
[root@centos7 ~]# read -p "请输入你的年龄:" age #age变量前面至少要有一个空格,使用-p参数可以定义显示在命令行中的提示语句,这样对用户比较友好。
请输入你的年龄:18
[root@centos7 ~]# echo $age
18
**范例12-24:**命令等待输入超时时间。
[root@centos7 ~]# read -t 3 -p "请输入你的年龄:" age #使用-t参数指定等待的秒数,超过这个时间,命令自动终止。
请输入你的年龄:[root@centos7 ~]#
**范例12-25:**关闭回显。
选项-s能够使read命令中输入的数据不显示在屏幕上,比如密码(如果12-1所示)。

图12-1 不显示输入数据
[root@centos7 ~]# read -p "请输入你的银行卡密码:" pass
请输入你的银行卡密码:123456
[root@centos7 ~]# read -s -p "请输入你的银行卡密码:" pass
请输入你的银行卡密码:[root@centos7 ~]#
**范例12-26:**设置输入字符的最大长度。
[root@centos7 ~]# read -n 3 -p "只能输入3个字符,不信你试试:" num #选项-n设置read命令所能输入字符的最大长度。当输入的字符数目达到预定值时,自动退出,并将输入的数据赋值给变量。
只能输入3个字符,不信你试试:123[root@centos7 ~]#
[root@centos7 ~]# echo $num
123
【功能说明】
type命令用于判断指定命令的类型。
【语法格式】
type [选项] [命令]
【选项说明】
表12-6针对该命令的参数选项进行了说明。
表12-6 type命令的参数选项及说明

【使用范例】
**范例12-27:**查看命令类型。
[root@centos7 ~]# type ls #未加任何参数,显示ls的最主要信息。
ls is aliased to `ls --color=auto'
[root@centos7 ~]# type -t ls #精简显示命令类型为别名。
alias
[root@centos7 ~]# type -a ls #显示所有相关信息。
ls is aliased to `ls --color=auto' #最先显示aliased。
ls is /usr/bin/ls #然后找到普通命令/usr/bin/ls。
[root@centos7 ~]# type cd
cd is a shell builtin #显示为内置命令类型。
[root@centos7 ~]# type -t cd
builtin
【功能说明】
ulimit命令用于查看系统资源的使用情况,同时也可以修改进程或用户等对系统资源分配的额度。
【语法格式】
ulimit [选项]
【选项说明】
表12-7针对该命令的参数选项进行了说明。
表12-7 ulimit命令的参数选项及说明

【使用范例】
**范例12-28:**显示当前所有系统资源使用限制。
[root@centos7 ~]# ulimit -a
core file size (blocks, -c) 0 #core文件的最大值为100 blocks。
data seg size (kbytes, -d) unlimited #进场的数据段可以任意大。
scheduling priority (-e) 0 #调度优先级。
file size (blocks, -f) unlimited #文件可以任意大。
pending signals (-i) 3806 #最多有7329个待处理的信号。
max locked memory (kbytes, -l) 64 #一个任务锁住的物理内存的最大值为64KB。
max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值。
open files (-n) 1024 #一个任务最多可以同时打开1024的文件。
pipe size (512 bytes, -p) 8 #管道的最大空间为4096(512*8)字节。
POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节。
real-time priority (-r) 0 #real-time调度优先级。
stack size (kbytes, -s) 8192 #进程栈的最大值为8192字节。
cpu time (seconds, -t) unlimited #进程使用CPU时间。
max user processes (-u) 3806 #当前用户同时打开的进程(包括线程)的最大个数为3806。
virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间。
file locks (-x) unlimited #所能锁住的文件的最大个数没有限制。
**范例12-29:**加大服务器打开文件描述符的数量。
[root@centos7 ~]# ulimit -n #默认新系统的最大文件打开数1024(也叫文件描述符)为1024,这个值对于生产环境的服务器来说太小了,因此通常会在优化服务器环节把这个值调大。
1024
[root@centos7 ~]# ulimit -n 65535 #调整数量为65535,但是通过命令调整的只对当前窗口生效,因此需要修改配置文件。
[root@centos7 ~]# ulimit -n
65535
[root@centos7 ~]# echo '* - nofile 65535' >>/etc/security/limits.conf #修改配置文件,永久生效。
**范例12-30:**清空变量。
[root@centos7 ~]# export NETEAGLE=1
[root@centos7 ~]# younggirl=2
[root@centos7 ~]# echo $NETEAGLE $younggirl
1 2
[root@centos7 ~]# unset NETEAGLE younggirl #unset命令可以清空变量的值。
[root@centos7 ~]# echo $NETEAGLE $younggirl
#变量的值为空。
[root@centos7 ~]#