前言:什么是shell,shell的作用是什么
shell是Linux系统中后台运行的一种特殊程序也可以理解 成一种特殊的软件,提供了用户与内核进行交互操作的 一种接口。(简单的说就是shell把人类的高级语言转换成二进制数据,让机器明白你的指令)
常见的shell编辑器
cat /etc/shells //linux中查看本机shell种类
/bin/sh 已淘汰
/bin/bash 现在常用的也是Linux的默认shell 管理员
/usr/bin/sh
/usr/bin/bash 现在常用的也是Linux的默认shell 普通用户
/bin/tcsh 基于tcsh,提供可更多的扩展功能
/bin/csh:类C语言shell
shell 脚本的用途和应用场景
用途:
- 自动化运维
- 批量化重复操作,可以通过脚本执行,减少人工重复输入
- 减轻了管理员的工作量
- 提高了处理文件的速度
- 避免配置出错
应用场景:
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
shell脚本的构成
vim first.sh
#!/bin/bash
#声明shell编辑器,就是使用bash5,可以不加。
cd /boot
echo "当前目录位置:"
pwd
#可执行语句:脚本当中内容执行顺序是从上到下,依次按行
执行
1.声明解释器
2.#表示注释,注释掉当前的代码不会被执行,而且是按行进行注释
3.脚本当中的语句,Linux的可执行命令都可以作为shell脚本的语句。
4.脚本当中的语句按照从上到下,依次按行执行。
shell的执行方式:
1.赋权执行(赋予执行权限)
2.不赋权执行(脚本测试)
shell脚本运行
source 脚本名
source 命令:点命令
对于刚刚修改的文件进行初始化操作(文件的内容都是shell语句,都是可执行命令),执行source可以不需要重启,使更改的内容直接生效
sh:只在当前环境运行,并不涉及子shell环境的切换
source:会新建一个shell继续执行。而且所有的执行结果都会保存在shell里面。
赋权执行:
chmod 777
./first.sh
.表示当前目录,若不在当前目录要写绝对路径
需要执行的脚本不能放在用户的家目录。
最好放在opt目录中
结合定时任务执行,必须要有绝对路径。
标准输入,标准输出,标准错误输出
标准输入:键盘,文件编号是0,我们是正常执行的命令结果。
标准输出:显示器,显示输出结果
标准错误输出:显示器,显示错误的输入信息。(LS)
重定向操作的符号用法
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件中读取数据,不是从键盘输入读取 |
重定向输出 | > | 将输出的结果保存在指定的文件中(覆盖原文件) |
>> | 将输出的结果追加在指定文件的末尾 | |
重定向错误输出 | 2> | 将错误信息保存在指定的文件(覆盖原文件内容) |
2>> | 将错误信息追加在指定文件的末尾 | |
混合输出 | &> | 将标准输出和标准错误信息都保存在同一个文件中 |
怎么shell脚本中定义变量,以及shell脚本的变量类型 shell运算符
变量:面向对象,对象的名称和属性
变量名
属性:变量的值,对象的描述信息
变量的属性:值的类型
int:整数类型
string:字符串类型
布尔: true false
浮点:1.2 3.4 5.6 7.8
变量的命令规范(自定义变量)
1.不要使用Linux的系统命令作为变量名
2.不要使用中文
3.不要使用特殊符号作为变量名称的开头,可以使用——作为变量开头 。
4.默认规则:学生 student(stu)
5.默认加上注释的,变量名的引用保持前后一致。
自定义变量:
在自定义变量当中:"" '' ``
整数类型可以不加引号,赋值为字符串类型,最好加上引号,以避免歧义。
在给变量赋值时,单引号和双引号一样,不影响变量的值
``:命令替换,先执行反撇号当中的命令,然后再把命令执行的结果赋值给变量。
打印变量时,引号的作用(这里不涉及反撇号)
打印变量时,双引号和单引号机制不同。
echo "$a" 弱引用,原变量值不变
echo '$a' 强引用,变量值不再引用,就是$a这个字符
echo "${a}"
${a}:保证一定能够正确识别变量值。
变量赋值:
-
a=1 b=1
2.read命令
read -p "" -a 回车
输入数字
变量的作用范围:
默认情况下,新定义的变量只在当前的shell环境有效。
全局变量:
export 变量名=变量值
需要再一整套环境当中引用唯一且不需要变化的变量时,才会声明全局变量。
环境变量:
系统提前创建,用户也可以添加。设置用户的工作环境,配置系统行为,控制程序执行。是一种特殊的环境变量。
用户级环境变量:env
echo $PATH查看用户的环境变量
预定义环境变量:系统预设,所有人可以都见,相当于全局变量
自定义的环境变量,特殊的全局变量,只对设置用户有效
$USER 显示用户名称
$HOME 用户家目录
$PWD表示当前所在的工作目录
$PATH:可执行用户程序的默认路径
位置变量
命令行参数
在脚本或程序运行时,传递给他们的值,而且未知变量是在脚本外部传递变量值。
$n 1-9
$1 $2 $3 $4
10以上的话则
${10} ${11}
预定义变量
编程语言或者脚本解释器提供的,不能修改的。只能根据需要进行自动设置或者更新。
$*和$@ 表示命令或者脚本需要处理的参数
$*和$@ ,不加引号时结果一致,都会分行处理
$*:加上引号,会把参数当成一行来处理
$#:显示需要处理的参数个数
$?:表示前一条命令或者脚本执行之后的返回状态码,只有返回0,表示执行成功,所有非0,全部表示失败。也可以在函数中作为return的返回值。
shell整数的运输方式
[root@localhost opt]#expr 1 + 1
2
[root@localhost opt]#expr 5 - 3
2
[root@localhost opt]#expr 3 \* 4
12
[root@localhost opt]#expr 18 / 3
6
[root@localhost opt]#expr 16 \* 3 - 22
26
[root@localhost opt]#expr 16 \* 3 - 22 + 15
41
[root@localhost opt]#expr 5 % 2
1
c=$(($a+$b))
运算符号
+ 加
- 减
* 乘
/ 除
%:取余数
i++: i=$(($i+1)) 每次都会自增1 先赋值,再+1
++i 先+1 再赋值
i-- 先赋值,再自减
--i 先自减,再赋值
浮点数运算
bc科学计算工具的运用
Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。
- 支持交互式和非交互式两种方式。
- 使用scale=n可以指定精度,即小数点后的位数。要写在算术表达式之前。
[root@localhost opt]#echo "1.1+1.1"|bc
2.2
[root@localhost opt]#echo "13.1-5.6"|bc
7.5
[root@localhost opt]#echo "scale=5;13.1*5.6"|bc
73.36
[root@localhost opt]#echo "scale=5;13.14*5.64"|bc
74.1096
awk命令的计算运用
使用awk进行浮点数的运算,运算结果最多只保留到小数点的后五位。
格式:awk "BEGIN{print 算术表达式}"
[root@localhost opt]#awk "BEGIN{print 1.62*3.2}"
5.184
[root@localhost opt]#awk "BEGIN{print 11.62/3.2}"
3.63125
[root@localhost opt]#awk "BEGIN{print 11.62+3.2}"
14.82
let的运用
格式:let 变量=<数值>运算符<数值>
运算符与echo $[ ]相同
除此之外:
与java,c语言等计算机语言的整数变量用法相似,有
let i++ let i-- let i+=2 let i*=2 等等
[root@localhost opt]#let i=5+8
[root@localhost opt]#echo $i
13
[root@localhost opt]#i=1
[root@localhost opt]#let i++
[root@localhost opt]#echo $i
2
[root@localhost opt]#let i*=5
[root@localhost opt]#echo $i
10