day56-linux-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.日常备份:使用ShellB脚本对MySQL进行每晚的全备与增量备份

6.信息采集Zabbix + Shell,硬件、系统服务、网络、等等

7.日志分析:取值>排序>去重>统计>分析

8.服务扩容扩容监控服务器集群cpu,如cpu负载持续80% +触发动作(脚本) ,脚本调用api开通

9.服务缩容:监控服务器集群cpu使用率, ->低于20%->检测当前有多少web节点>判断是否超过预

设>缩减到对应的预设状态>变更负载的配置

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

标准:

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

4.shell脚本的相关预备知识?

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

1.熟练使用vim编辑器

2、熟练使用linux基础命令

3、熟练使用linux三剑客

注意如果我们对命令使用不够熟练、对基本服务也不会手动搭建、那么- -定学不会Shell

2.如何才能学好shelI[脚本

1、基础命令+基础服务+练习+思路。( 必备)

2、能看懂Shell脚本-> 能修改Shell脚本->能编写Shell[脚4本-->能优化Shel]脚本

5.shell脚本书写方式

**1. shell脚本命名规则: **

  • 名字要有意义,不要使用a、b. C、1、2、3、这种方式命名;虽然inux系统中,文件没有扩展
    名的概念,依然建议使用.sh 结尾;名字不要太长,最好控制在30个字节之内.
  1. shell脚本格式:
    shell脚本开头必须制定脚本运行环境以#!这个特殊符号组合来组成.
    2. shell脚本中#的使用:

    1 #!/bin/bash
    2 #*********************
    3 #Author: 流星花雨
    4 #QQ: 1679338722
    5 #Date: 2019-10-28
    6 #FileName: var01.sh
    7 #URL: https://www.leitiancheng.cn
    8 #Description: The test script
    9 #*********************

6.脚本的执行方式以及书写规范

1.执行脚本的方式:

  1. 加执行权限 ./script_filename.sh
  2. 通过bash直接翻译 bash script_filename.sh

2.#!/usr/bin/bash 加与不加区别

  1. 如果不明确这是一个什么类型的脚本,直接调用对应的解释器执行,没有影响
  2. 如果你不清楚是什么类型的脚本,直接使用./执行,那么会读取该脚本的第一行
  3. 如果第一行是#!/usr/bin/bash 或者没有写该行,那么都将使用默认的bash翻译
  4. 如果是一个Python脚本,没有写开头,那么执行一定会报错;因为默认使用bash解释器,而我们使用的解释器确是bash.

3.添加命令解释器的几种方式

#!/usr/bin/bash
#!/usr/bin/sh
#!/usr/bin/env bash
#!usr/bin/env python

7.shell变量概述

1.什么是变量

变量是shell中传递数据的一种方法.就是用一个固定的字符串表示不固定的值,便于后续引用.

2.变量命名规范

变量定义命名:大写字母+小写字母+下划线组成,尽量采用字母开头.(变量命名最好携带有一定的含义)

变量定义语法: 变量名=变量值,等号是赋值,需要注意等号两边不能有空格,定义的变量不要与系统命令出现冲突.

3.自定义变量

    var="hello world"
    echo $var
    echo ${var}_log
4. 美元符和美元符@的区别*

不加引号时,而知都是返回传入的参数,但加了引号后,此时*把参数作为一个字符串的整体返回,$@把每个参数作为一个字符串返回

5.什么是变量替换

就是在不改变原有变量的情况下,对变量进行替换

6.为什么要使用变量替换

在需要对某个变量的值进行证书对比,但变量的值是一个小数.我们可以使用替换的方式将小鼠位进行删除,然后再进行证书比对

7.变量替换的几种方式

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

需求一: 通过为止传参的方式,创建Linux系统账户及密码,执行 var1.sh username password

[root@manager-61 ~]#cat variables/var04.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var04.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************

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

需求二:通过位置传参的方式,创建linux系统用户及密码,执行var.sh username password控制最多传递两个参数

[root@manager-61 ~]#cat variables/var05.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var05.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
if [ $# -ne 2 ]; then
   echo "USER: $0 请传递两个参数 [ username | password ]"
   echo "不是传递 $# 个参数"
fi
useradd $1
echo "$2 | passwd --stdin $1"

需求三:使用read 迷你linux登录页面

[root@manager-61 ~]#cat variables/var06.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var06.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************

echo -n "Login: "
read acc
echo -n "Password: "
read pw
echo "你输入用户名是: $acc 你输入的密码是: $pw"
------------------------------------------------------
[root@manager-61 ~]#cat variables/var07.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var07.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************

read -p "Login: " acc
read -s -t50 -n6 -p "Password: " pw
echo "你输入的用户名是: $acc 你输入的密码是: $pw"
--------------------------------------------------------
[root@manager-61 ~]#cat variables/var08.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var08.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************

echo "$(hostamectl |awk -F ":" '/Operating System:/ {print $2}')"
echo "Kernel $(uname -r) on an $(uname -m)"
read -p "$(hostname) Login: " acc
read -s -t50 -p "Password: " pw
echo ""
echo "你输入的用户名是: $acc 你输入的密码是: $pw"

需求四:使用read编写一个备份脚本,需要用户传递两个参数,源和目标

[root@manager-61 ~]#cat variables/var09.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var09.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************

echo "------------请按照如下提示输入--------------"
read -p "请输入你要备份的源文件或者目录: " Source 
read -p "请输入你要备份的目录目标位置是: " Dest
echo -e  "\t你要备份的源文件或目录是:"
         "你要备份的目标位置是: " $Dest
read -p "你确定要备份吗? [ y | n ]" Action
if [ $Action == "y "];then
   cp -rpv $Source $Dest
fi 

需求五:使用read编写一个探测主机存活的脚本,需要用户传递测试的IP地址

#1.提示用户输入IP
#2.对用户输入的IP进行探测是否存活
#3.判断探测结果是否成功
   成功则输出成功的结果
   失败则输出失败的结果
[root@manager-61 ~]#cat variables/var10.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var10.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
 
read -p "请输入需要探测的ip地址: " ip
ping -W1 -c1 "$ip" >/dev/null
if [ $? -eq 0 ];then
   echo "$ip" is ok
else
   echo "$ip" is errors
fi

需求六:使用shell编写一个修改主机名称的脚本

#1.打印当前的主名称
#2.提示用户输入新的主机名称
#3.询问用户是否执行修改命令
#4.确定修改执行命令
#5.不确定,退出脚本
[root@manager-61 ~]#cat variables/var11.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var11.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************

echo "当前的主机名称是: $(hostname)"
read -p "请输入新的主机名称: " new_host
read -p "你确定要将 $(hostname) 变更为 ${new_host} 吗? [ y | n ]" Action
if [ $Action == "y" ];then
   hostname ${new_host}
   hostnamectl set-hostname ${new_host}
   echo "你的主机名称已经修改为 ${new_host}"
fi

-----------------------------变量替换-----------------------------------------------------

需求七:将$PATH中的/bin/替换为/BIN/

[root@manager-61 ~]#cat variables/var12.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var12.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************




echo "${PATH//bin/BIN}"

需求八:变量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-61 ~]#vim variables/var13.sh 

 #Author: 流星花雨
 #QQ: 1679338722
 #Date: 2019-10-28
 #FileName: var13.sh
 #URL: https://www.leitiancheng.cn
 #Description: The test script
 #*********************
 
 
  string="Bigdata process is Hadoop, Hadoop is op    en source project"
  echo "1)、打印string长度"
  echo "2)、删除字符串中所有的Hadoop"
  echo "3)、替换第一个Hadoop为Linux"
  echo "4)、替换全部Hadoop为Linux"
  read -p "请输入对应的数字: [ 1 | 2 | 3 | 4 ]" A    ction
  if [ ${Action} == 1 ];then
     echo "${#string}"
  fi
  if [ ${Action} == 2 ];then
     echo "${string//Hadoop/}"
  fi
  if [ ${Action} == 3 ];then
     echo "${string/Hadoop/Linux}"
  fi
  if [  ${Action} == 4 ];then
     echo "${string//Hadoop/Linux}"
  fi

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

#1.当前内存使用的百分比
#2.进行判断比对
   如果大于80% 则会触发邮件
   否则,over
   [root@manager-61 ~]#cat variables/var14.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: 14.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************


Free=$(free -m | awk '/Mem:/ {print $3/$2*100}')
echo "${Free%.*}"
if [ ${Free%.*} -ge 10 ];then
   echo  "当前占用内存: ${Free} 已超过80%"
fi

需求十:根据系统时间打印今年的时间和明年的时间

[root@manager-61 ~]#cat variables/var15.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var15.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
echo "今年的时间是$(date |awk '{print $6}')"
echo "明年的时间是$(date |awk '{print $6+1}')"

需求十一:根据系统时间获取今年还剩多少星期,已经过了多少星期.

[root@manager-61 ~]#cat variables/var16.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var16.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************
num1=$(date +%j) 
num2=${}
echo "今年已经过了$(date +%j)天"
echo "今年已经过了$(($(date +%j)/7))周"
echo "今年还剩下天$[365-$(date +%j)]天"
echo "今年还剩下周$[(365-$(date +%j))/7]周"

需求十二: 完成一个计算器功能:传入2个值,然后对传入的值进行加减乘除

[root@manager-61 ~]#cat variables/var17.sh 
#!/bin/bash
#*********************
#Author: 流星花雨
#QQ: 1679338722
#Date: 2019-10-28
#FileName: var17.sh
#URL: https://www.leitiancheng.cn
#Description: The test script
#*********************

echo "$1+$2 = $[$1+$2]"
echo "$1-$2 = $[$1-$2]"
echo "$1*$2 = $[$1*$2]"
echo "$1/$2 = $[$1/$2]"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,743评论 0 10
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,567评论 0 0
  • 本文是对Linux shell编程的一个学习比较,共包括如下章节的内容: 概述 基本语法 结构化语句 函数 小结 ...
    我是老薛阅读 830评论 0 5
  • 概述 首先,咱们来了解一下,什么是Shell。操作系统内核给我们提供了各种接口,同时也提供了各种用户层的库,理论上...
    keysaim阅读 1,370评论 0 0