通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出
简单来说,shell就是一个用户跟操作系统之间的一个命令解释器
是一个功能相当强大的编程语言,易编写,易调试,灵活性强
最常用的shell是Bash,在日常工作中被广泛应用,也是大多数Linux操作系统默认的shell环境
自动化批量系统初始化程序(update,软件安装,时区设置,安全策略)
自动化批量软件部署程序(LAMP,LNMP,Tomcat,LVS,Nginx)
应用管理程序(KVM,集群管理扩容,MySQL,DELLR720批量RAID构建)
日志分析处理程序(PV,UV,200,!200,top 100,grep/awk)
自动化备份恢复程序(MySQL完全备份/增量 + Crond)
自动化管理程序(批量远程修改密码,软件升级,配置更新)
自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
自动化扩容(增加云主机 → 业务上线)
配合Zabbix信息采集
俄罗斯方块,打印三角形,打印五角星,打印圣诞树,运行小火车,排序算法实现
理论上可以做任何事(一切取决于业务需求)
login shell:su - alice,/etc/profile,/etc/bashrc,~/.bash_profile,~/.bashrc
nologin shell:su alice,/etc/bashrc,~/.bashrc
命令和文件自动补齐
命令历史记忆功能:上下键,!number,!string,!$,!!,^R
别名功能:alias,unalias cp,~username/.bashrc,\cp -rf /etc/hosts
快捷键:^R,^D,^A,^E,^L,^U,^K,^S,^Q
前后台作业控制:&,nohup,^C,^Z,bg%1,fg%1,kill%3,screen
输入输出重定向:catfile1< 管道:|tee,可以用来完成一些比较复杂的功能 命令排序:;不具备逻辑判断;&&,|| 具备逻辑判断 通配符(元字符):表示的不是本意 命名一般为英文,大写,小写,后缀为.sh 不能使用特殊符号,空格 名称要写的一眼就能看出功能 首行需要以 #!/bin/bash 开头(指定解析器) 变量不能以数字,特殊符号开头,可以使用下划线,但不能使用破折号 作为可执行程序运行 作为解释器参数运行 单行注释:以#开头 多行注释::<,利用一个空命令接收要注释的命令行,不做任何事情,以此来达到注释的目的:命令行在起始 << 建立shell文件 赋予shell文件可执行程序权限(使用chmod命令修改权限) 执行shell文件(直接运行赋予权限后的二进制文件) ①环境变量 是所有shell程序都可以使用的变量 shell程序在运行时都会接收的一组变量,会影响到所有的脚本执行结果 常用的有:$HOME,$PWD,$SHELL,$USER等 基本语法 作用范围 ②自定义变量 基本语法 命名规则 作用范围 ③系统变量 主要在对参数判断和命令返回值判断时使用,包括脚本和函数的参数以及脚本核函数的返回值 $n:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} $#:获取所有输入参数个数,常用于循环 $!:上一个后台进程的PID $*:代表命令行中所有的参数,把所有的参数看成一个整体 $@:代表命令行中所有的参数,不过把每个参数区别对待 $?:最后一次执行的命令返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了 显式赋值:变量名=变量值 read从键盘读入变量值:read 变量名 定义或引用变量时注意事项:① ' ':强引用 ② " ":弱引用,变量依然还是变量,而且会替换成相应的值 ③ ' ' :命令替换,等价于 $(),反引号中的shell命令会被先执行 整数(90%以上) 小数 注意事项 内容的删除 内容的替换 变量的替代 对变量的值没有影响 对表达式的值有影响:①i++:先赋值,再运算 ②++i:先运算,再赋值 test 条件表达式 [ 条件表达式 ] (注意前后要有空格)(建议使用) [[ 条件表达式 ]] 两个整数之间比较 按照文件权限进行判断 按照文件类型进行判断 注意事项 注意事项 注意事项 while循环用于不断执行一系列命令,也用于从输入文件中读取数据 until循环执行一系列命令直到条件为true时停止 一般while循环优于until循环 只能使用整数作为数组索引 在bash下,仅支持一维数组,没有限定数组的大小 定义 查看数组 访问数组元素 遍历数组 可以使用字符串作为数组索引 basename [string / pathname] [suffix] dirname 文件绝对路径 完成特定功能的代码片段(块) 在shell中定义函数可以使用代码模块化,便于复用代码 必须在调用函数之前,先声明函数,shell脚本是逐行运行的,不会像其他语言一样先编译 函数返回值,只能通过 $? 系统变量获得,可以显示加 :return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值 n(0-255) function fun()表示有返回参数的函数 fun()表示无返回参数的函数 return可存在也可不存在,如果不加return,则默认最后一条语句的执行状态为函数执行状态的返回值 shift:使位置参数向左移动,默认移动1位,可以使用shift 2 exit:退出整个程序 break:结束当前循环,或跳出本层循环 continue:忽略本次循环剩余的代码,直接进行下一次循环 是一种字符模式,用于在查找过程中匹配指定的字符 在大多数程序里,正则表达式都被置于两个正斜杠之间 它将匹配被查找的行中任何位置出现的相同模式 在正则表达式中,元字符是最重要的概念 是在文件中负责剪切数据用的 cut命令从文件的每一行剪切字节,字符和字段并将其输出 基本用法 选项参数说明 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入,一个或多个文件,或其它命令的输出 它支持用户自定义函数和动态正则表达式邓先进功能 它在命令行中使用,但更多是作为脚本来使用 处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理 基本用法 options command 记录与字段相关内部变量 是一种在线的,非交互式的编辑器,它一次处理一行内容 处理时,把当前处理的行存储在临时缓冲区中,称为模式空间;接着用sed命令处理缓冲区中的内容;处理完成后,把缓冲区的内容送往屏幕;接着处理下一行,这样不断重复,直到文件末尾 文件内容并没有改变,除非你使用重定向存储输出 主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等 基本用法 选项参数说明 命令功能描述 注 是在linux里非常有用,它将文件进行排序,并将排序结果标准输出 基本用法 选项参数说明 参数4.注意事项
5.运行方法
6.注释
EOF
和随后临近的 第一个 EOF
之间的内容都会被注释掉 7.步骤
二.变量
1.分类
2.赋值方式
3.运算
4.内容的删除和替换
5.i++和++i(了解,基本用不到)
三.条件测试
1.格式
2.常用的判断条件
四.流程控制
1.if 判断
#单分支结构
if [ 条件判断式 ]
then 命令序列
fi
#双分支结构
if [ 条件判断式 ]
then 命令序列
else 命令序列
fi
#多分支结构
if [ 条件判断式 ]
then 命令序列
elif [ 条件判断式 ]
then 命令序列
else 命令序列
fi
2.case 语句
case 变量 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
*)
无匹配后的命令序列
;;
esac
3.for 循环
#基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
#基本语法2
for 变量 [ in 取值列表 ]
do
程序
done
4.while until
#while语句结构:==当条件测试成立(条件测试为真),执行循环体
while 条件测试
do
程序
done
#until语句结构:==当条件测试成立(条件测试为假),执行循环体
until 条件测试
do
程序
done
五.数组
1.普通数组
2.关联数组
六.函数
1.系统函数
2.自定义函数
[ function ] funname[()]
{
action;
[return int;]
}
funname
七.内置命令
八.正则表达式
元字符
正则表达式元字符
九.工具
1.cut
2.awk
3.sed
4.sort