shell介绍
什么是shell?
shell一般代表两个层面的意思,一个是命令解释器(处于系统接口之上的一种程序),比如bash,另一个就是代表一种编程语言,用于操作Linux系统的一种编程语言。
为何要用shell?
shell是一种解释型的弱类型编程语言(对变量的类型划分没有那么的明确),他可以帮助我们更好的管理Linux操作系统,同时可以很方便得写一些简单的脚本程序
如何用shell?
运行shell程序有两种方式:
1、交互式环境
每敲一条立即执行一条,不能永久保存代码
2、无交互环境
把shell命令写入文件中,该文件称之为脚本文件,运行方式是:bash 脚本文件的路径
#运行shell脚本经历的三个阶段
(1)先启动bash解释器
(2)bash解释器会将脚本文件的内容从硬盘读入内存
(3)bash解释器会解释执行刚刚读入内存的代码,识别语法
shell中有很多特殊的字符,不同的情境下,字符的含义也不同,下文就是我就shell中的字符整理出的,大家有兴趣可以去看看,我就不重新赘述了。
shell中的特殊字符
变量
1、什么是变量
量:记录下的事物的状态
变:事物的状态是可以发生变的
变量是一种存取内存的机制
2、为何要用变量
为了让计算机能够像人一样记下事物的状态,记不是目的,目的是为了以后取出来用
并且事物的状态是可以改变的
3、如何用变量
原则:先定义,后引用
** 引号对变量的影响**
“”:软引用,引号符号有特殊意义
‘’:硬引用,引号所有符号均无特殊意义
``:取命令的运行结果
变量命名规则最好遵循下述规范:
1.以字母开头
2.使用中划线或者下划线做单词的连接
3.同类型的用数字区分
4.对于文件最好加上拓展名
例如: sql_bak.tar.gz,log_bak.tar.bz2
** 变量作用域与环境变量设置**
shell中的变量通常只在当前进程有效,若想让shell中的变量在多个进程有效必须如下操作
x=111
export x #将此变量继承给其子进程
环境变量就是在整个shell解释器的环境下都有效,那么 若想添加环境变量则需要将变量写入/etc/profile文件末尾即可如:
vim /etc/profile
x=111
export x
系统变量
set:显示所有变量
env:环境变量
变量赋值
VARNAME=VALUE
echo $VARNAME
删除变量 unset VARNAME
变量的算术运算符
-
加
-
减
-
乘
/ 除
% 取余
shell里的所有计算器
$[] (()) $(()) expr bc bc -l
浮点运算:yum install bc -y
[root@MiWiFi-R3-srv ~]# echo ‘scale=2;1/3’|bc -l
.33
echo $
? #将上条命令输出的结果打印出来,结果为真时返回0,结果为假时返回非零
[ $name = yzl ]时,为判断与test类似,所以他的参数也跟test一样
test 参数
- n字符串
字符串的长度不为零
字符串,相当于-n字符串
- z的字符串
字符串的长度为零
STRING1 = STRING2相等
字符串是相等的
STRING1 ! = STRING2相等
字符串不相等
INTEGER1 eq INTEGER2
INTEGER1等于INTEGER2
INTEGER1 ge INTEGER2
INTEGER1大于等于INTEGER2
INTEGER1 gt INTEGER2
INTEGER1大于INTEGER2
INTEGER1 le INTEGER2
整数1小于等于整数2
INTEGER1 lt INTEGER2
整数1小于整数2
INTEGER1 - ne INTEGER2
INTEGER1不等于INTEGER2
FILE1 ef FILE2
FILE1和FILE2具有相同的设备号和inode号
FILE1 - nt FILE2
FILE1比FILE2更新(修改日期)
FILE1 ot FILE2
FILE1比FILE2老
- b文件
文件存在并且是特殊块
- c文件
文件存在并且是特殊字符
- d文件
文件存在并且是一个目录
- e文件
文件是否存在
- f文件
文件存在并且是一个常规文件
- g的文件
文件存在,且为set-group-ID
- g的文件
文件存在,并且由有效组ID拥有
- h文件
文件存在,是一个符号链接(与-L相同)
- k文件
文件存在并设置了其粘性位
- l文件
文件存在,是一个符号链接(与-h相同)
- o文件
文件存在,并由有效用户ID拥有
- p文件
文件存在并且是一个命名管道
- r文件
文件存在,并授予读权限
- s文件
文件存在且大小大于0
- s文件
文件存在并且是套接字
在终端上打开文件描述符FD
- u文件
文件存在并且它的set-user- id位已经设置
- w文件
文件存在且有写权限
- x文件
文件存在并授予执行(或搜索)权限
注意:涉及数字类型的判断用-eq -ge -lt等字母连接,涉及字符串的判断时用“=”连接
涉及敏感操作(如备份)时,可以加上以下代码
set -o errexit #脚本中错误退出
set -o nounset #脚本中取不到变量值退出(变量没定义)
set -o pipefail #管道运行失败,就退出
#read用于与用户交互,-p将用户输入的结果打印出来
read -p “请输入您的年龄:” age