什么是shell?
shell是用户使用linux的工具,它有两种执行方式,一种是交互式解释执行,我们平时操作linux的各种命令就属于这种。另一种是批处理的方式,类似于程序性语言,有变量和参数,具有流程控制结构。
shell中的变量
我们可以在shell中定义一个变量,并赋值,正如其它语言一样。
- env #显示全局变量(系统变量)
- set #显示所有变量
- unset + 变量名 #删除一个变量。
- echo $变量 # 打印变量的值
- export 变量 # 把变量声明为全局变量(即在当前终端开一个子bash或新开终端,通过export 变量,可以让变量继续生效)
- 修改环境变量PATH: 编辑系统文件/etc/profile,将python的路径加入PATH全局变量,保存退出。
- {}声明变量的边界
shell中的运算符(( )):
- 算术运算符:+、-、*、/、%
- 赋值运算符:=、+=、*=、/=、%= 例子:
- 关系运算符:
- ==、>、>=、<、<= 例子:
- &&逻辑与、||逻辑或、!=逻辑非 例子:
- ==、>、>=、<、<= 例子:
- bc 计算器,支持浮点数运算
test测试命令:
- (()) 常用于数字之间的关系运算,但是有很大的局限性。而test命令适用于各种情况,应用更方便。
- test -n 'abc' # 测试字符串abc的长度是否为零,如果不为零,那么测试结果为真0;如果是空字符,那么为假1
- [ ] 我们习惯用两个中括号来代替test命令。注意:中括号内的首位打空格。测试字符串长度不为零,用[ ]表达
- test / [ ] 命令测试字符常用的选项:
- -n #字符串长度不为零
- -z #字符串长度为零
- = #字符串是否相等
- != #字符串不相等
- test / [ ]:-a逻辑与、-o逻辑或
- test / [ ] 测试数字常用选项:
- -eq #整数相等
- -ge #大于等于
- -le #小于等于
- -gt #大于
- -lt #小于
- -ne #不等于
- test / [ ] 测试文件类型:
- -b #判断文件是块设备
- -d #判断文件是目录
- -f #判断文件是普通文件
- -h #判断文件是普通文件
- 例子:
- 用户认证
- 判断块设备
- 判断目录
- 用户认证
shell流程控制:
- if...fi:写一个判断登录是否成功的脚本
注意:如果脚本无法执行,chmod +x 脚本 修改权限 - if...elif...else...fi 判断文件类型,多个分支条件:
-
while ...do...done 循环:
sleep 1 暂停1秒;第10次不满足,done结束;done下面可以跟下一条命令 - 循环猜年龄:
- 判断登录用户,登录成功后执行命令:
- for循环:
- C语言风格,例子:打印乘法表
控制打印格式:-n 当前行不换行打印,echo 空 换行 - shell格式:
- 实战:测试哪些ip地址可用
每次ping会输出一长串提示信息,所以通过 &> /dev/null 把提示信息写入空文件;
ping成功了输出提示,并写入一个文档记录下来。 - 检测/dev下各种类型的文件数量
for后面跟的有结果就行,比如:
输出/test目录下的文件
另外,相对路径不能被判断文件类型的条件检测到,所以要写绝对路径。
注意:如果链接文件的判断条件在普通文件之下,那么,在if判断普通文件时,回去寻找连接文件的源文件类型,如果源文件是普通文件,那么算作普通文件,稍后之后的链接文件就不会再判断了,为0. 因为if判断过的文件不会再去重复判断。除非把链接文件的判断条件放在前面。
- C语言风格,例子:打印乘法表