文章目录
- 一.shell脚本
- 1.shell脚本基础
- 2.重定向和管道符
- 2.1重定向
- 2.2管道符
- 3.变量
- 3.1变量类型
- 3.2变量命名要求
- 3.3read 变量
- 3.4整数的运算
- 3.5 位置变量
- 3.6预定义(状态)变量
- 4.条件语句
- 4.1 test 或者[ ]
- 4.2 数字比较
- 4.3字符串比较
- 4.4逻辑测试(短路运算)
- 4.5if elif else
- 4.6case
- 4.7echo命令
- 5.循环
- 5.1for循环
- 5.2 while循环
- 6.总结
一.shell脚本
1.shell脚本基础
Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
shell脚本是将linux命令写入一个文件中,直接执行该文件即可执行文件里的所有内容,程序执行顺序有3种
- 顺序执行:程序按从上到下顺序执行
- 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
- 循环执行:程序执行过程中需要重复执行多次某段语句
使用shell脚本的命令有三种
1:绝对路径执行(需要有执行权限)
2:shell语言+文件名
3:source+文件名
shell错误也有3种
1:命令错误
命令出错不会影响接下来的命令继续
2:语法错误
会影响接下来的命令继续
3:逻辑错误
只能自己去筛查
2.重定向和管道符
2.1重定向
重定向的的意思就是不输出到屏幕上,而是直接输入到你指定的位置
多行重定向:即EOF作为标志并且你想输入啥都会进去,最后用EOF作为结尾告诉系统自己输入好了。
2.2管道符
管道符的作用是传参,将前一个命令获得的输出作为参数传给下一个命令执行,可叠加使用。
3.变量
3.1变量类型
常见的变量类型有
自定义变量:由用户自己定义,修改和使用
环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改
3.2变量命名要求
1.区分大小写
2.不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=
3. 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
4.不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
变量名=“变量值”
变量值赋予变量名
1.赋值时使用双引号(" ")可以直接调用变量
2.赋值时使用单引号(’ ')
3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果$( ) 用法相同
4.{}可以分隔变量值
3.3read 变量
将自己输入的内容作为变量
用法:read -p “随意输入”:“与随意输入”有关的变量
3.4整数的运算
expr只能进行整数的运算
格式: expr 变量1 运算符 变量2 [运算符 变量3]
运算符:
加法 +
减法 -
乘法 \ *
除法 /
取余 (取模)%
3.5 位置变量
$(数字)
即第几行的内容作为变量
$0表示脚本自身
3.6预定义(状态)变量
- $*:表示所有位置参数的内容看成一个整体返回 返回所有 (45667) $1
- $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有 4 5 6 6 7
- $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
- $#:表示命令行中位置参数的总个数
- $0:表示当前执行的脚本或程序的名称 当前脚本的名字
- $$:当前进程id
- $!: 后台任务最后一个id
4.条件语句
4.1 test 或者[ ]
后面加上判断的内容,测试完之后输入echo$?如果出来0则代表正确,如果出来非0则代表不正确。
当测试执行权限是,测的是是否真的能执行的权限(注意root用户)
4.2 数字比较
[ 整数1 操作符 整数2 ] 公式
- -eq:第一个数等于(Equal)第二个数
- -ne:第一个数不等于(Not Equal)第二个数
- -gt:第一个数大于(Greater Than)第二个数
- -lt:第一个数小于(Lesser Than)第二个数
- -le:第一个数小于或等于(Lesser or Equal)第二个数
- -ge:第一个数大于或等于(Greater or Equal)第二个数
4.3字符串比较
常用的测试操作符
- =:字符串内容相同
- !=:字符串内容不同,! 号表示相反的意思
- -z:字符串内容为空
- -n: 字符是否存在
4.4逻辑测试(短路运算)
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] …
格式2:命令1 操作符 命令2 …
常见条件
- -a或&&:逻辑与,“而且”的意思全真才为真
- -o或||:逻辑或,“或者”的意思一真即为真
当判断出非的时候才会往下走
4.5if elif else
提出条件的语句(if)后面跟上判断条件,then执行命令
如果出现多分支就用else再接行then执行命令,或者else把所有情况都排除,then接命令,最后需要接上fi作为结尾
4.6case
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默认分支
;;
part1和part2里面代表的是情况
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
| 或者,如: a|b
4.7echo命令
常用的echo转义符:
echo -n 表示不换行输出
echo -e 表示输出转义符
5.循环
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
- 循环次数事先已知
- 循环次数事先未知
5.1for循环
命令:for i in (变量)
do (执行的命令)
done (结束)
for循环是根据次数进行操作
5.2 while循环
相对于for,需要知道循环次数
我们只知道停止条件,不知道次数,就需要使用while
直到达到条件
6.总结
用的较多的是变量名,位置变量,预定义变量,循环,条件判断。