1:shell介绍
语言分类:编译型,解释型
2:适用环境
开发一些小工具作用。
举例子:一键部署web环境,日志分析,检查计算机硬件,服务器监控,服务器重启
3:为什么学习Shell原因:
提升运维人员的工作效率,减少重复的工作劳动
4:运维的三个工具语言
Shell Python Perl
5:Linux运维原则
简单,易用,高效
6:常见的Shell
Sh csh tcsh ash bash
7:shell是一道程序,存在哪里?
/bin , /usr/bin
8:查看Shell有哪些
Cat /etc/shells
9:这么多shell,查看当前系统使用的shell
Echo $SHELL
8:Shell提示符
# 表示root用户
$ 表示普通用户
9:Shell提示符格式
$PS1 外层提示符的格式
$PS2 第二层提示符的格式
提示符格式组成:
\a 铃声字符
\d 格式为 “日月年”的日期
\e ASCII转义字符
\h 本地主机名
\H 完全合格的限定域主机名
\j shell当前管理的作业数
\1 shell终端设备名的基本名称
\n ASCII换行字符
\r ASCII回车
\s shell的名称
\t 格式为"小时:分钟:秒"的24小时制的当前时间
\T 格式为“小时:分钟:秒”的12小时制的当前时间
\@ 格式为am/pm的12小时的当前时间
\u 当前用户的用户名
\v bash shell的版本
\V bash shell的发布级别
\w 当前工作目录
\W 当前工作目录的基本名称
\! 该命令的bash shell历史数
\# 该命令的命令数量
\$ 如果是普通用户,则为美元符号$ 如果是超级用户,则为#
\nnn 对应与八进制值nnn的字符
\\ 斜杠
\[ 控制码序列的开头
\] 控制码序列的结尾
10:运维手链
用运维要干的事情组成的手链
Nginx
PHP运行时
Tomcat
LVS集群
ipable防火墙
MySQL数据库
Apache
OpenStack/Docker
KVM虚拟化
Zabbix监控
NFS存储
SSH服务
定时任务
基础命令
11:关于Linux的扩展名的理解
文件的扩展名是为了见名知意,好理解,不影响脚本执行
12:变量特点:
组成:字母,数字 ,下划线
以字母或者下划线开头
不能用Linux系统专用的名词
13:单引号和双引号的区别
单引号:单引号里面是什么字符就原样输出,单引号里面不能用单引号,除非使用\
双引号:双引号里面的变量和命令要先被解析,然后才能输出
14:变量:
只读变量: readonly 变量名字
删除变量: unset 变量名
15:特殊变量:
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
16:$* 和 $@的区别
"$*" "$1 $2 $3 ...."
"$@" "$1" "$2" "$2" ...
17:执行命名方式
`命令`
$(命令)
18:变量替换
可以使用的变量替换形式:
形式 说明
${var} 变量本来的值
${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。
19:shell数组:
只能是一维数组
定义: a=(a1 a2 a3) 或者 a[0] = a1 a[1]=a2 a[2]=a2
读取数组:${array_name[index]}
使用@ 或 * 可以获取数组中的所有元素,例如:
${array_name[*]}
${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
纯文本复制
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
20:if else 语句
if [ expression ]
then
Statement(s) to be executed if expression is true
Fi
if [ expression ]
then
Statement(s) to be executed if expression is true
else
Statement(s) to be executed if expression is not true
Fi
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
21: test命令
数值测试
字符串测试
文件测试
22:case语句
case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
Esac
23:for语句
for 变量 in 列表
do
command1
command2
...
commandN
Done
24:while语句
while command
do
Statement(s) to be executed if command is true
Done
25:until语句
until command
do
Statement(s) to be executed until command is true
Done
26:函数
function_name () {
list of commands
[ return value ]
}
27:重定向
28:文件包含
. filename
或
source filename