第一章:Shell基础

第一节:Shell概述

1.什么是shell?

Shell是一种脚本语言,字面理解就是个“壳”,是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用户输入的命令翻译给系统执行。

2.Shell脚本能做什么 ?

(1)基础配置:系统初始化操作、系统更新、内核调整、网络、时区、SSH优化等。

(2)安装程序:LNMP、LAMP、MySQL、Nginx、Redis等。

(3)配置变更:Nginx Conf、PHP Conf、MySQL Conf、Redis Conf等。

(4)业务部署:Shell配合Git、Jenkins实现自动化部署PHP、Java代码,以及代码回滚。

(5)日常备份:MySQL全备 + 增量 + binlog + crond + Shell脚本备份等。

(6)信息采集:Zabbix + Shell: 对硬件、系统、服务、网络的监控等。

(7)日志分析:ELK:取值->排序->去重->统计->分析等。

(8)服务扩容/缩容:Zabbix + Shell
扩容: 监控服务器cpu, 如cpu负载持续80% + 触发动作(脚本)
脚本: 调用api开通云主机->初始化环境->加入集群->对外提供访问

​ 缩容: 监控服务器cpu使用率20%->判断有多少web节点->判断是否超过预设->缩减到对应的预设状态->变更负载的配置

第二节:Shell脚本的执行方式

1.sh bash 不需要执行权限,会重新打开一个会话窗口执行

[root@backup /scripts]# sh  test.sh  &>/dev/null
[root@backup /scripts]# bash  test.sh  &>/dev/null

2.path/脚本名 全路径执行 ./scriptname 需要执行权限,会重新打开一个子shell执行,执行完成后会自动关闭开启的子shell

[root@backup /scripts]# ./test.sh
[root@backup /scripts]# chmod  +x  /scripts/test.sh
[root@backup /scripts]# /scripts/test.sh   全路径执行
[root@backup /scripts]# ./test.sh

3.source scriptname / . scriptname 使用点和source来执行,把程序调用到当前shell执行

[root@backup /scripts]# source   test.sh

[root@backup /scripts]# .  test.sh 

4.cat 脚本名 | bash

[root@backup /scripts]# cat  test.sh  |bash

5.bash < 脚本名

[root@backup /scripts]# bash  <  test.sh 

6.登录式shell与非登录式shell

登录时shell 是通过用户及密码的方式进行登录的

非登录式shell 不是通过用户及密码的方式进行登录的, bash 命令直接进入一个非登录shell(子shell) 脚本的方式

7.配置文件的生效顺序

登录式 (父shell)

/etc/profile
/etc/profile.d/test.sh
.bash_profile
.bashrc
/etc/bashrc

非登录式shell (子shell)

[root@backup ~]# bash
.bashrc
/etc/bashrc
/etc/profile.d/test.sh

第三节:Shell中变量的使用

1.自定义变量 --只能在当前会话窗口生效

变量名=值
[root@backup ~]# Name=web01        #定义
[root@backup ~]# echo  $Name       #调用
web01
[root@backup ~]# echo  $Name_123

[root@backup ~]# echo ${Name}_123   #变量名后面如果有其他内容,需要把变量名用{}扩起来
web01_123

set     #显示所有定义的变量 

unset   #取消定义的变量

单双引号与不加引号及反引号的区别

  • 单引号 强引用,所见即所得
  • 双引号 弱引用,所见即所得,会解析变量
  • 不加引号 所见即所得,会解析变量,如果出现了空格,不会把他看做是一个整体
  • 反引号 先执行反引号里面的命令,把输出结果交给外面的命令 跟 $() 同义 ,里面必须是可执行命令

2.系统环境变量(为了区分一般使用大写)

在当前shell及子shell生效

[root@backup ~]# export  NAME=web   #在当前shell定义变量
[root@backup ~]# echo  $NAME        #父shell调用变量
web
[root@backup ~]# bash               #进入子shell

[root@backup ~]# echo $NAME         #子shell调用变量
web
[root@backup ~]# env               #显示所有系统环境变量  

要想使定义的变量永久生效 ,写入配置文件中即可

3.预定义变量

$0   #当前shell脚本的文件名
$1   #第1个shell脚本位置参数
$2   #第2个shell脚本位置参数
$3   #第3个shell脚本位置参数
$*   #所有传递的位置参数-------
                  不加引号相同 ---->加引号区别:$*将所有的参数看作整体输出|$@将所有的参数单独输出     
$@   #所有传递的位置参数-------
$#   #总共传递的参数个数
$$   #当前程序运行的 PID
$?   #上一个命令执行的返回结果
$!    #上一个在后台运行脚本的PID 调试使用
$_    # 获取脚本的最后一个参数 相当于ESC .

4.位置变量

N {10} 位置变量大于10 必须要用{}括起来

5.Shell赋值传参

read -p 简单用法

[root@backup /scripts]# cat read-1.sh
#!/bin/bash
read -p "请输入一个数字:" num
echo "你输入的数字为:$num"

read -p "请输入mysql的密码:" -s password   #-s回显你输入的内容

你可能感兴趣的:(第一章:Shell基础)