一、shell简述
概念:shell解释器,翻译官功能,与内核进行沟通的应用程序。
把代码翻译为二进制,让内核处理,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
linux的shell:/etc/shells
用户使用命令时,系统会检测这个文件得到内容,命令在里面才可以使用相关命令。
bash(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell。
二、shell脚本
shell脚本文件格式:.sh
运行shell脚本命令:1.sh first.sh
2.bash first.sh
3.source first.sh
4../first.sh(需要赋予权限)
脚本的优点:
1.自动化运维
2.批量化重复操作可以编写脚本结合计划任务自动周期运行
3.减轻管理员工作量
4.提高处理文本文件的速度
5.避免配置出错
shell脚本格式:
1.第一行默认:#!/bin/bash(不输入也是可以,shell脚本默认是有的)
2.注释:shell脚本应该有注释
3.可执行语句
shell脚本的运算:
expr 可以一般用于整数值,也可用于字符串
运算符:
1.加法 +
2.减法 -
3.乘法 \ *
4.除法 /(只会显示整数,除不尽为0)
5.取余 (取模)%
运算法则:
1.加法:num1 + num2
2.减法:num1 - num2
3.乘法:num1 \ * num2
4.整除:num1 / num2
5.取余(求模):num1 % num2 (求 num1 除以 num2 的余数)
例子演示:
三、重定向
1.< 重定向输入(从直到文件输入)
2.> 重定向输出(直接覆盖直到文件内容)
3.>> 重定向输出(直接将输出内容加入到直到文件尾部)
4.2> 重定向错误输出(将错误信息保存到指定文件,覆盖)
5.2>> 重定向错误输出(将错误信息保存到指定文件)
6.&> 混合输出(将标准输出和错误输出都保存到同一个文件)
例子演示:重定向输出
重定向面试题:
如何在不删除文件情况下,将文件清空:
四、管道符
| :主要用在处理文本上,将管道符号“|”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
例子演示:将test1用户的密码改为123456
五、变量
1.变量类型:1.字符串string(abc)
2.整型int(1,2)
3.浮点型(1.1)
4.布尔型(0,1)
2.变量命名规范:
1.不使用系统的命令作为变量名(例如:cd,ls)
2.不使用中文作为变量名
3.必要使用特殊符号。(下划线除外)
4.要有注释
3.自定义变量:由用户自己定义、修改和使用
变量赋值:格式:变量名=变量值,变量命名规则:以字母或下划线开头,区分大小写
4.引用变量:引用对应的值,格式:前面加$表示引用变量
引用加双引号表示弱引用,表示变量的值
引号加单引号表示强引用,表示变量本身,相当于字符串
例子演示:
反撇号表示引用命令执行结果,给变量赋值
5.全局变量
全局变量概念:在程序或脚本中定义的具有全局范围的变量。
这意味着全局变量在整个程序或脚本的不同部分都是可见和可访问的,而不仅限于特定的函数、方法或代码块。
(1)临时全局变量
export 变量名=变量值
例子:export a=1(所有登录用户可以使用)
(2)永久全局变量
/etc/profile修改配置文件
优点:
1.全局范围
2.持久性
3.共享性
副作用:
1.相同变量名,直接引用全局变量,会导致不确定性,一般使用局部变量
6.局部变量
局部变量概念:默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。
当进入子程序或新的子Shell环境时,局部变量将无法再使用。
可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。
(1)临时局部变量
a=1
(2)永久局部变量
.bash_profile
7.环境变量
查看环境变量:env
环境变量由系统提前创建,用来设置用户的工作环境
PATH="$PATH:/root" #将/root目录添加到搜索路径
将root添加到全局变量后,系统可以第一时间匹配root的文件
例子演示:可以看到add.sh实在/root目录下的文件,切换到/opt后无法运行,但是将root目录加入环境变量,就可以运行
8.位置变量
是在运行脚本或程序时传递给它们的值。位置变量用于将外部数据传递给脚本或程序,以便根据需要进行处理。
可以看到输入9个数,但num=第9为数和第2位置数相加
9.预定义变量
预定义变量:通常由编程语言或脚本解释器提供,并根据需要自动设置和更新,不能修改
$#:表示传入多少个参数
$@:把各个参数加上双引号分行处理,每个参数作为一个字符串返回
$*:把所有参数看成以空格分隔的一个字符串整体(单字符串)返回
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
例子演示:
1.$#
2.$@加引号,可以整行输出
将引号取消,分行显示:
3.$@和$*加双引号表现一致
4.$?表现判读是否成功
六、shell脚本基本知识
1.read -p 获取输入内容
-p prompt:指定提示符,用于提示用户输入数据。
2.read -a 获取输入数组
-a array:将输入数据存储到一个数组中。
七、预定义变量小实验
1.判断两个数是否相等
1代表错误
1