管理整个计算机硬件的其实是操作系统的内核(kernel),这个内核是需要被保护的。所以一般用户就只能通过Shell来跟内核沟通,以让内核完成我们所想要实现的任务。
命令快速编辑按钮
一、Shell的变量功能
变量就是以一组文字或符号等,来替换一些设置或一串保留的数据。
1.1、变量的使用与设置:echo、变量设置规则、unset
变量的使用:echo
变量在被使用时,前面必须要加上美元符号【 $ 】,或是以 $ {variable}的方式来使用。
读取变量: echo $variable | ${variable}
[root@VM_0_8_centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/python3/bin:/usr/local/mysql/bin:/root/bin
[root@VM_0_8_centos ~]# echo ${HOME}
/root
在bash当中,当一个变量名称尚未被设置时,默认的内容是【空】。变量通过等号(=)进行赋值,且等号两边不能有空格。
[root@VM_0_8_centos ~]# echo ${myname}
[root@VM_0_8_centos ~]# myname=c123
[root@VM_0_8_centos ~]# echo ${myname}
c123
变量的设置规则
- 变量与变量内容以一个等号【=】来连接
myname=c123 - 等号两边不能直接接空格,否则会报错
错误示例:myname = c123 或 myname=c123 456 - 变量名称只能是英文字母与数字,但是开头字符不能是数字
错误示例:1myname=c123 - 变量内容若有空格可使用双引号【"】或单引号【’】将变量内容结合起来
特殊使用情况
-
双引号内的特殊字符如 $ 等,可以保持原本的特性
var=“lang is $LANG” 则 echo $var 输出结果:lang is en_US.utf8 -
单引号内的特殊字符则为一般字符(纯文本)
var=‘lang is $LANG’ 则 echo $var 输出结果:lang is $LANG -
可用转义符【\】将特殊符号(如[Enter]、$、\、空格、’等)变成一般字符
myname=c\ 123 -
在一串命令的执行中,还需要借由其它额外的命令所提供的信息时,可以使用反单引号【` 命令 `】或 【$(命令)】,这些被特殊处理的命令会优先执行
version=“内核的版号:$(uname -r)” 再echo $version 输出结果:内核版本号:3.10.0-1062.18.1.el7.x86_64
-
若该变量为扩增变量内容时,则可用"$ 变量名称" 或 “$ {变量}” 或 $ PATH 累加内容
PATH="$ PATH":/home/bin 或 PATH=$ {PATH}:/home/bin 或 PATH=$ PATH:/home/bin -
若该变量需要在其他子程序运行,则需要以export来使变量变成环境变量
export 自定义变量名称 -
通常大写字符为系统默认变量,自行设置变量可以使用小写字符
-
取消变量的方法为使用unset:【unset 变量名称】 例如取消myname的设置
unset myname
示例:子程序下使用变量
在目前这个shell的情况下,去启用另一个新的shell,新的那个shell就是子程序。
[root@VM_0_8_centos ~]# name=c123
[root@VM_0_8_centos ~]# echo $name
c123
[root@VM_0_8_centos ~]# bash <== 进入子程序
[root@VM_0_8_centos ~]# echo $name <== 子程序中输出name变量的值
<== 子程序没有name这个变量,输出为空
[root@VM_0_8_centos ~]# exit <== 离开子程序
exit
[root@VM_0_8_centos ~]# export name <== 设置name为环境变量
[root@VM_0_8_centos ~]# bash
[root@VM_0_8_centos ~]# echo $name
c123
[root@VM_0_8_centos ~]# exit
exit
[root@VM_0_8_centos ~]# unset name
[root@VM_0_8_centos ~]# echo $name
示例:进入内核模块目录
[root@VM_0_8_centos ~]# cd /lib/modules/$(uname -r)/kernel
[root@VM_0_8_centos kernel]# pwd
/lib/modules/3.10.0-1062.18.1.el7.x86_64/kernel
cd命令进行了两次操作:
1、先进行括号内的操作【uname -r】并得到内核版本 3.10.0-1062.18.1.el7.x86_64
2、将上述的结果带入原命令,故得命令为:cd /lib/modules/3.10.0-1062.18.1.el7.x86_64/kernel
1.2、环境变量的功能
环境变量可以帮我们实现很多功能,包括根目录(主文件夹)的变换、提示字符的显示、执行文件查找的路径等。
用env观察环境变量与常见环境变量说明
[root@VM_0_8_centos ~]# env
XDG_SESSION_ID=18535
HOSTNAME=VM_0_8_centos <== 主机名称
TERM=xterm <== 终端使用的环境类型
SHELL=/bin/bash <== 使用Shell的类型
HISTSIZE=3000 <== 历史命令记录的条数
USER=root <== 使用者的名称
LS_COLORS=rs=0:di=01;34:ln=01;... <== 一些颜色设置
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/python3/bin:/usr/local/mysql/bin:/root/bin
PWD=/root <== 目前使用者所在的工作目录(使用pwd获取)
LANG=en_US.utf8 <== 语系
SHLVL=1
HOME=/root <== 使用者的家目录
LOGNAME=root <== 登录者用来登录的账号名称
_=/usr/bin/env <== 上一次使用的命令的最后一个参数(或命令本身)
PATH:执行文件查找路径,目录与目录中间以冒号(:)分隔,由于文件的查找是依序由PATH的变量内的目录来查询的,所以,目录的顺序也是重要的。
用set观察所有变量(含环境变量与自定义变量)
BASH=/bin/bash <== bash的主程序路径
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release' <== 这两行是bash的版本
COLUMNS=94 <== 在目前终端下,使用的栏位由几个字符长度
HISTFILE=/root/.bash_history <== 历史命令记录的放置文件,隐藏文件
HISTFILESIZE=3000 <== 存起来(与上个变量有关)的文件之命令的最大记录数
HISTSIZE=3000 <== 目前环境下,内存中记录的历史命令最大条数
IFS=$' \t\n' <== 默认的分隔符号
LINES=31 <== 目前的终端下的最大行数
MACHTYPE=x86_64-redhat-linux-gnu <== 安装的机器类型
OSTYPE=linux-gnu <== 操作系统的类型
PS1='[\u@\h \W]\$ ' <== PS1,命令提示符
PS2='> ' <== 如果你使用转义符(\),这是第二行以后的提示字符
$ <== 目前这个shell所使用的PID
?