美文网首页
第一章:Shell基础

第一章:Shell基础

作者: chenkang | 来源:发表于2019-10-30 21:13 被阅读0次

    第一节: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.位置变量

    1...N 10{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基础

          本文链接:https://www.haomeiwen.com/subject/vfvavctx.html