美文网首页
Shell第一天

Shell第一天

作者: 杨小倪 | 来源:发表于2019-10-29 08:31 被阅读0次

Shell第一天

1.什么是shell?

shell是一个命令解释器,将输入的命令解释给内核,在将内核返回的信息输出值屏幕

当然shell命令是存在交互式、非交互式两种方式。
交互式,其实在我们日常生活中,使用最多的一种模式、登陆终端、执行命令、返回结果。再次输入命令、然后等待结果,最后工作结束退出shell会话,当退出shell会话后,当前的shell会话也就终止了。

非交互式:在这种模式下,shell不与你进行交互,而是直接读取某个文件进行执行。那文件中都有什么,其实,就是一堆的命令。当文件从头执行到尾,结束时,当前shell也终止了。

2.什么是shell脚本

1.将系统命令堆积到一起,顺序执行(简称 系统命令堆积)
2.特定的格式 + 特定的语法 + 系统命令 = 文件

3.shell能做什么

1.基础配置:系统初始化操作、系统更新、内核调整、网络、时区、SSH优化
2.安装程序:部署LNMP、LNMT、MySQL、nginx、redis、elk等
3.配置变更:Nginx conf、PHP Conf、MySQL Conf、Redis Conf
4.业务部署:Shell配合git、jenkins实现自动化部署php、java代码,以及代码回滚
5.日常备份:使用shell脚本对MySQL进行每晚的全量与增量备份
6.信息采集:Zabbix + shell,硬件、系统、服务、网络、等等
7.日志分析:取值->排序->去重->统计->分析
8.服务扩容:扩容,监控服务器集群cpu,如果负载持续80% + 触发动作(脚本);脚本调用api开通云主机->初始化环境->加入集群->对外提供
9.服务缩容:监控服务器集群cpu使用率--低于20%-->检测当前有多少web节点--判断是否超过预设定--缩减至预设定状态--变更负载配置

PS:Shell脚本的主要作用是简化操作步骤,提高效率,减少人为干预,减少系统故障


ps:
    1.安装方式一致
    2.安装路径一直
    3.目录结构一致
    4.日志格式一致
    5.脚本路径一致

4.学习shell脚本需要的预备知识

1.需要的预备知识
    1.熟练使用vim编辑器
    2.熟练使用linux命令
    3.熟练使用三剑客
2.如何才能学好shell脚本
    1.基础命令+基础服务+练习+思路 (必备)
    2.能看懂shell脚本+能修改shell脚本+编写shell脚本+优化脚本

5.shell脚本的书写方式

1.shell脚本命名

名字要有意义,不要使用abcd123这种方式命名;虽然说Linux系统中,文件没有名字的概念,依然建议你使用 。sh结尾,名字不要太长,最好是能在30个字节内解决

2.shell脚本格式

脚本开头必须指定脚本运行环境 ,以#!这个特殊符号组合组成例如: #!/usr/bin/bash

3.shell脚本里面 # 的应用

#   注释,主要是用来描绘我们的shell脚本使用的方式

6.shell脚本执行方式

1.当我们给脚本加上执行权限之后,可以 . / 运行

2.如果不希望赋予脚本执行权限,那么可以使用bash命令来运行未给予权限的脚本

!/usr/bin/bash 驾驭不加的区别

1.如果你明确清除这是一个什么类型的脚本,直接调用对应的解释器执行,没有影响

2.如果你不清楚是什么类型的脚本,直接而是用 . / 执行,那么会读取该脚本的指定的解释器,如果没有指定,那么默认会使用bash翻译

书写方式

!/usr/bin/bash

!/usr/bin/sh

!/usr/bin/env bash

!/usr/bin/env python

PS: env会主动寻找命令解释器所在的路径

本章课程

1. 什么是变量variables?

变量是shell 中传递数据的一种方法。

简单理解,变量就是用一个固定的字符串,去表示一个不固定的值。

2.变量的规范

1.大写开头,后面小写或数字都ok

2.变量具有一定的含义

3.白能量的写法 A=1 等于不能有空格

2.Shell变量定义

1.变量定义方式

1.用户自定义变量:认为定义变量名与变量的值
2.系统环境变量:保存的是和系统操作环境相关的数据,所有用户都可以使用
3.位置参数变量:像脚本中进行参数传递,变量名不能自定义,变量作用是固定的
4.预定义的变量:是Bash中已定义好的变量,变量名不能自定义,变量的作用也是固定的。

2.用户自定义变量实例,当前shell有用

export 可以将自定义变量转换为全局变量

3.预先定义的变量参数实例,系统内置变量

$0      当前shell脚本的文件名
$1      第一个shell脚本位置参数
$2      第二个shell脚本位置参数
$3      第三个shell脚本位置参数  
$*      所有传递的位置参数是
$@      所有传递的位置参数是
$#      总共传递的参数个数是
$$      当前程序运行的PID
$?      上一个命令执行的返回结果


$* 与$@的区别,当不加引号时,二者相同
加入引号时,$* 把它当做一个整体
而$@则是把它拆分开来

  1. 通过位置传参的方式,创建Linux系统账号及密码

    useradd $1
    echo $2 | passwd --stdin $1
    
    
    

2.通过传参的方式,Linux系统账户及密码,控制最多传递两个参数

[root@manager var_01.sh]# cat 2.sh 
#!/bin/bash
#********************************************************************
#Author: 杨
#QQ: 429007127
#Date: 2019-10-28
#FileName: 2.sh
#URL: http://blog.yangxiaoni.top
#Description: The test script
#********************************************************************


if [ $# -ne 2 ];then
    echo "请传递两个参数 [ username | passwd ]"
    exit
fi

useradd $1
echo $2 | passwd --stdin $1


3.变量赋值

除了自定义变量,以及系统内置变量,还可以使用read命令通过交互方式传递变量。

read选项 选项含义
-p 打印信息
-t 限定时间
-s 不回显
-n 指定字符个数

使用read方式进行系统登陆

[root@manager var_01.sh]# cat 3.sh 
#!/bin/bash
#********************************************************************
#Author: 杨
#QQ: 429007127
#Date: 2019-10-28
#FileName: 3.sh
#URL: http://blog.yangxiaoni.top
#Description: The test script
#********************************************************************

read -p "Login: " acc
read -n6 -t50 -s  -p "Passwd: " pw

echo "你输入的用户名是:$acc"
echo "你输入的密码是:$pw"


需求1:使用read模拟Linux登陆页面

[root@manager var_01.sh]# cat 4.sh 
#!/bin/bash
#********************************************************************
#Author: 杨
#QQ: 429007127
#Date: 2019-10-28
#FileName: 4.sh
#URL: http://blog.yangxiaoni.top
#Description: The test script
#********************************************************************


echo "hostnamectl | awk -F ":" '/System/{print $2}'"
echo "hostnamectl | grep "Kernel""

read -p "manager Login: " acc
read -s -t50 -p "Password: " pw
echo ""

echo "你输入的用户名: $acc 你输入的密码是: $pw"


需求2.用read备份数据

[root@manager var_01.sh]# cat 5.sh 
#!/bin/bash
#********************************************************************
#Author: 杨
#QQ: 429007127
#Date: 2019-10-28
#FileName: 5.sh
#URL: http://blog.yangxiaoni.top
#Description: The test script
#********************************************************************

 read -p "请输入要备份的源:" bf
 read -p "情输入要备份到哪里去:" mb
 read -p "确认是否备份 [ y | n ]: " Action

 if [ $Action == y ];then
    cp -rpv $bf $mb
 fi


需求3:使用read编写一个探测主机存活

[root@manager var_01.sh]# cat 6.sh 
#!/bin/bash
#********************************************************************
#Author: 杨
#QQ: 429007127
#Date: 2019-10-28
#FileName: 6.sh
#URL: http://blog.yangxiaoni.top
#Description: The test script
#********************************************************************

read -p "请输入要测试的主机ip:" Ip

ping -W1 -c1 "$Ip" &> /dev/dull

if [ $? -eq 0 ];then
    echo "该主机可以通"
else
    echo "该主机不可以通讯"
fi


需求4: 修改主机名称

[root@manager var_01.sh]# cat 7.sh 
#!/bin/bash
#********************************************************************
#Author: 杨
#QQ: 429007127
#Date: 2019-10-28
#FileName: 7.sh
#URL: http://blog.yangxiaoni.top
#Description: The test script
#********************************************************************


echo "当前主机名称是: $(hostname)"
read -p "请输入要修改的主机名:" Hostname

read -p "你确定要将 $(hostname) 变更为 $(Hostname) 吗?[ y | n ]" Action

if [ $Action == "y" ];then
    hostname ${Hostname}
    hostnamectl set-hostname $Hostname
    echo "你的主角名称已修改成功"
fi


4.shell变量替换

1.什么是变量替换?

简单来说,就是在不改变原有的变量的情况下,对白能力进行替换。

2.为什么要用变量替换

例如:我们需要对某个变量的值进行整数比对,单变量的值是一个小鼠。怎么办?我们可以使用变量替换的方式,将小数位进行删除,然后再进行比对。

3.变量替换的几种方式

变量 说明
${变量#匹配规则} 从头开始匹配,最短删除
${变量##匹配规则} 从头开始匹配,最长删除
${变量%匹配规则} 从尾开始匹配,最短删除
${变量%%匹配规则} 从尾开始删除,最长删除
${变量/旧字符串/新字符串} 替换变量的旧字符串为新字符串,只能替换第一个
${变量//旧字符串/新字符串} 替换变量内的旧字符串为新字符串,全部替换

实例:

------------#
[root@manager ~]# echo ${url#*.}        #从头开始匹配,最短匹配
sina.com.cn 
[root@manager ~]# echo ${url##*.}       #从头开始匹配,最长匹配
cn

------------%
[root@manager ~]# echo ${url%.*}
www.sina.com
[root@manager ~]# echo ${url%%.*}
www

-------------/
[root@manager ~]# echo ${url/c/C}
www.sina.Com.cn
[root@manager ~]# echo ${url//c/C}
www.sina.Com.Cn


需求2:变量string="Bigdata process is Hadoop, Hadoop is open source project",执行脚本后,打印输出string变量,并给出用户以下选项:

1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
用户输入数字1|2|3|4,可以执行对应项的功能


[root@manager variables]# cat var12.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-28
# FileName:   var12.sh
# URL:         https://www.xuliangwei.com
# Description: 
string="Bigdata process is Hadoop, Hadoop is open source project"

echo $string
echo "1)、打印string长度"
echo "2)、删除字符串中所有的Hadoop"
echo "3)、替换第一个Hadoop为Linux"
echo "4)、替换全部Hadoop为Linux"
read -p "请输入对应的选项 [ 1 | 2 | 3 | 4 | q ] " Action

if [ $Action -eq 1 ];then
    echo "他的长度是: ${#string}"
fi

if [ $Action -eq 2 ];then
        echo "${string//Hadoop/}"
fi

if [ $Action -eq 3 ];then
    echo ${string/Hadoop/Linux}
fi

if [ $Action -eq 4 ];then
    echo ${string//Hadoop/Linux}
fi

需求3:查看内存/当前使用状态,如果使用率超过80%则报警发邮件,思路如下:

    1.当前内存使用百分比是多少
    2.进行判断比对  
        如果大于80%  则触发邮件
        否则,over
        已使用的内存  /  总内存  * 100 = 使用的百分比
        
mem_use=$(free -m | awk '/^Mem/ {print $3/$2*100}')
if [ ${mem_use%.*}  -ge 10 ];then
    echo "你的内存已经超过了80%  目前的内存使用状态是 ${mem_use}%"
fi


需求1:根据系统时间,打印今年和明年时间。
[root@manager variables]# cat var14.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-28
# FileName:   var14.sh
# URL:         https://www.xuliangwei.com
# Description: 

echo "今年的时间是: $(date +%Y)"
echo "明年的时间是: $(( $(date +%Y) +1 ))"

需求2:根据系统时间获取今年还剩下多少星期,已经过了多少星期。思路如下:
date +%j 已经过了多少天

一年有365天   已经过了 301 = 还剩下   365-301 = 64  / 7 = 还剩下多少周
              已经过了 301 天 / 7 = 已经过了多少周
              
[root@manager variables]# cat var15.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-28
# FileName:   var15.sh
# URL:         https://www.xuliangwei.com
# Description: 
Date=$(date +%j)

echo "今年已经过了 ${Date}   天"
echo "今年已经过了 $[ ${Date} /7 ] 周"
echo "今年还剩下 $[ ( 365 - ${Date} ) / 7 ]  周"
echo "从现在距离下一个新年还有  $[ 365 - ${Date} ]  天"

需求3:完成一个计算器功能: 传入2个值,然后对传入的值进行 加 减 乘 除,思路如下:

    1.使用read让用户传值:     $1 $2
    2.对传入的值进行运算:
    3.输出对应的结果.
[root@manager variables]# cat var16.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-28
# FileName:   var16.sh
# URL:         https://www.xuliangwei.com
# Description: 

echo "$1 + $2 = $[ $1 + $2 ]"
echo "$1 - $2 = $[ $1 - $2 ]"
echo "$1 * $2 = $[ $1 * $2 ]"
echo "$1 / $2 = $[ $1 / $2 ]"
echo "$1 % $2 = $[ $1 % $2 ]"


相关文章

  • Shell第一天

    Shell第一天 1.什么是shell? 2.什么是shell脚本 3.shell能做什么 4.学习shell脚本...

  • Linux第一天

    Linux第一天 linux目录 Shell指令 就是Linux指令 常用的shell指令 目录 删除 查看文件 ...

  • Shell 学习

    shell 变量 shell 参数传递 shell 数组 shell 运算符 shell echo 命令 prin...

  • Shell 概述

    学习 Shell 主要包括的内容: Shell 脚本入门 Shell 变量 Shell 内置命令 Shell 运算...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • Shell 教程

    Shell 变量 Shell 传递参数 Shell 数组 Shell 基本运算符 Shell echo 命令 Sh...

  • shell 案例

    Shell编程一 Shell防范ARP攻击 Shell编程二 Shell防范DDos攻击 Shell编程三 ...

  • 【生物信息笔记】shell 脚本 (dry-2)

    shell 和 shell script(脚本)区别: shell 和 shell 脚本是两个不同概念,shell...

  • Linux Shell:基础知识和Shell变量

    摘要:Linux,Shell 整理Shell内容要点: Shell基础知识 Shell变量的类型 Shell变量赋...

  • Shell脚本语言一

    一、语法 格式 运行 Shell变量 Shell字符串 Shell数组 Shell注释 Shell传递参数 She...

网友评论

      本文标题:Shell第一天

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