Error[8]: Undefined offset: 1449, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录

shell 入门到实战详解[⭐建议收藏!!⭐] 关于作者

一、shell 入门简介 1.1 什么是shell 1.2 shell 编程注意事项 1.3 第一个shell 脚本 hello world 二、shell 环境变量讲解 2.1 shell 变量详解 2.2 shell 系统变量 介绍 2.3 shell 环境变量 介绍 2.3.1 常见的系统环境变量 2.4 shell 用户环境变量 介绍 2.4.1 自定义shell环境变量 2.4.2 echo 打印菜单栏 2.4.3 shell 中彩色输出 helloworld 三、shell 编程流程控制语句 3.1 if 条件语句介绍 3.1.1 常用的单/双分支 3.1.2 if 常见判断逻辑运算符详解 3.1.3 使用单分支语句判断crond 进程是否在运行—案例 3.1.4 判断系统目录是否存在 —案例 3.1.5 多个条件判断学生分数等级 — 案例 3.2 for 循环语句介绍 3.2.1 检查同一局域网 多台主机是否存活 3.3 while 循环语句介绍 3.3.1 While循环求1-100的总和 —案例 3.3.2 每10秒循环判断一次 hbs用户是否登录系统 —案例 3.4 case 选择语句介绍 3.4.1 使用case 编写一个 httpd 服务启动脚本 3.5 select 选择语句介绍 3.5.1 使用select 打印lnmp 菜单栏 —案例 3.6 shell 函数、数组 编程 实战 3.6.1 定义一个httpd 安装的函数 —案例 3.6.2 遍历数组元素 — 案例 四、shell 编程实战 案例 4.1 shell 脚本实战之 系统备份脚本 —案例 4.2 shell 脚本 实战 之收集系统信息 —案例 4.3 shell 脚本实战 之 一键部署 lnmp 架构 — 案例 总结

shell 是我们工作中很重要的一部分,在工作中充当着重要的角色。企业生产环境中,服务器规模成百上千,如果依靠人工去维护和管理是非常吃力的,基于Shell编程脚本管理和维护服务器变得简单、从容,而且对企业自动化运维之路的建设起到极大的推动作用。

所以,不管是你看到哪里的书籍、资料、还是视频,每个老师讲的侧重点都不一样,但是基础是一样的,要想学号shell,需要反复动手写,思考,理解shell 的精髓,才能掌握shell ,写好shell。

以梦为马,不负韶华,流年笑掷,未来可期!
                     —黄昏

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 1450, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录

shell 入门到实战详解[⭐建议收藏!!⭐] 关于作者

一、shell 入门简介 1.1 什么是shell 1.2 shell 编程注意事项 1.3 第一个shell 脚本 hello world 二、shell 环境变量讲解 2.1 shell 变量详解 2.2 shell 系统变量 介绍 2.3 shell 环境变量 介绍 2.3.1 常见的系统环境变量 2.4 shell 用户环境变量 介绍 2.4.1 自定义shell环境变量 2.4.2 echo 打印菜单栏 2.4.3 shell 中彩色输出 helloworld 三、shell 编程流程控制语句 3.1 if 条件语句介绍 3.1.1 常用的单/双分支 3.1.2 if 常见判断逻辑运算符详解 3.1.3 使用单分支语句判断crond 进程是否在运行—案例 3.1.4 判断系统目录是否存在 —案例 3.1.5 多个条件判断学生分数等级 — 案例 3.2 for 循环语句介绍 3.2.1 检查同一局域网 多台主机是否存活 3.3 while 循环语句介绍 3.3.1 While循环求1-100的总和 —案例 3.3.2 每10秒循环判断一次 hbs用户是否登录系统 —案例 3.4 case 选择语句介绍 3.4.1 使用case 编写一个 httpd 服务启动脚本 3.5 select 选择语句介绍 3.5.1 使用select 打印lnmp 菜单栏 —案例 3.6 shell 函数、数组 编程 实战 3.6.1 定义一个httpd 安装的函数 —案例 3.6.2 遍历数组元素 — 案例 四、shell 编程实战 案例 4.1 shell 脚本实战之 系统备份脚本 —案例 4.2 shell 脚本 实战 之收集系统信息 —案例 4.3 shell 脚本实战 之 一键部署 lnmp 架构 — 案例 总结

shell 是我们工作中很重要的一部分,在工作中充当着重要的角色。企业生产环境中,服务器规模成百上千,如果依靠人工去维护和管理是非常吃力的,基于Shell编程脚本管理和维护服务器变得简单、从容,而且对企业自动化运维之路的建设起到极大的推动作用。

所以,不管是你看到哪里的书籍、资料、还是视频,每个老师讲的侧重点都不一样,但是基础是一样的,要想学号shell,需要反复动手写,思考,理解shell 的精髓,才能掌握shell ,写好shell。

以梦为马,不负韶华,流年笑掷,未来可期!
                     —黄昏

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
linux shell 脚本 入门到实战详解[⭐建议收藏!!⭐]_java_内存溢出

linux shell 脚本 入门到实战详解[⭐建议收藏!!⭐]

linux shell 脚本 入门到实战详解[⭐建议收藏!!⭐],第1张

文章目录
  • shell 入门到实战详解[⭐建议收藏!!⭐]
    • 关于作者
    • 作者介绍
    • 一、shell 入门简介
      • 1.1 什么是shell
      • 1.2 shell 编程注意事项
      • 1.3 第一个shell 脚本 hello world
    • 二、shell 环境变量讲解
      • 2.1 shell 变量详解
      • 2.2 shell 系统变量 介绍
      • 2.3 shell 环境变量 介绍
        • 2.3.1 常见的系统环境变量
      • 2.4 shell 用户环境变量 介绍
        • 2.4.1 自定义shell环境变量
        • 2.4.2 echo 打印菜单栏
        • 2.4.3 shell 中彩色输出 helloworld
    • 三、shell 编程流程控制语句
      • 3.1 if 条件语句介绍
        • 3.1.1 常用的单/双分支
        • 3.1.2 if 常见判断逻辑运算符详解
        • 3.1.3 使用单分支语句判断crond 进程是否在运行---案例
        • 3.1.4 判断系统目录是否存在 ---案例
        • 3.1.5 多个条件判断学生分数等级 --- 案例
      • 3.2 for 循环语句介绍
        • 3.2.1 检查同一局域网 多台主机是否存活
      • 3.3 while 循环语句介绍
        • 3.3.1 While循环求1-100的总和 ---案例
        • 3.3.2 每10秒循环判断一次 hbs用户是否登录系统 ---案例
      • 3.4 case 选择语句介绍
        • 3.4.1 使用case 编写一个 httpd 服务启动脚本
      • 3.5 select 选择语句介绍
        • 3.5.1 使用select 打印lnmp 菜单栏 ---案例
      • 3.6 shell 函数、数组 编程 实战
        • 3.6.1 定义一个httpd 安装的函数 ---案例
        • 3.6.2 遍历数组元素 --- 案例
    • 四、shell 编程实战 案例
      • 4.1 shell 脚本实战之 系统备份脚本 ---案例
      • 4.2 shell 脚本 实战 之收集系统信息 ---案例
      • 4.3 shell 脚本实战 之 一键部署 lnmp 架构 --- 案例
    • 总结

shell 入门到实战详解[⭐建议收藏!!⭐] 关于作者
  • 作者介绍

    🍊 博客主页:作者主页
    🍊 简介:云计算领域优质创作者🏆、学长的it故事 公众号创作者🎓、在校期间参与众多计算机相关的省赛、国赛,斩获系列荣誉。考取华为资深工程师、红帽工程师等系列认证。

    🍊 关注我:简历模板、学习资料、文档下载、技术支持 都可以私信我哦!
    让生命像一团热烈燃烧的火,直到死亡才能使它熄灭


一、shell 入门简介 1.1 什么是shell
  • shell 脚本简介

    # 为啥介绍shell
      上次出了一篇linux 命令详解,得到了很多小伙伴的认可,有部分粉丝私信我,让我出一份shell 编程。进过一段时间准备,花了2周时间,整理了一篇shell 入门到实战的博文,欢迎大家阅读,指点。
    
    # 什么是shell
    
    网上有很多shell 的概念介绍,其实都很官方化,如果你对linux 命令很熟悉,那么编写shell 就不是一个难事,shell 本质上是 linux 命令,一条一条命令组合在一起,实现某一个目的,就变成了shell脚本。它从一定程度上 减轻了工作量,提高了工作效率。
    
    # 官方化的shell 介绍
    Shell 通过提示您输入,向 *** 作系统解释该输入,然后处理来自 *** 作系统的任何结果输出,简单来说Shell就是一个用户跟 *** 作系统之间的一个命令解释器。
    
    # 常见的shell 有哪些
    	Bourne Shell(/usr/bin/sh或/bin/sh)
    	Bourne Again Shell(/bin/bash)
    	C Shell(/usr/bin/csh)
    	K Shell(/usr/bin/ksh)
    	Shell for Root(/sbin/sh)
    # 最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux *** 作系统默认的Shell环境。
    
    
1.2 shell 编程注意事项
  • shell 编程有哪些注意事项
    • shell 命名:Shell脚本名称命名一般为英文、大写、小写,后缀以.sh 结尾
    • 不能使用特殊符号、空格
    • 见闻之意,名称要写的一眼可以看出功能
    • shell 编程 首行需要 #!/bin/bash 开头
    • shell 脚本 变量 不能以 数字、特殊符号开头,可以使用下划线—,但不能 用破折号 -
1.3 第一个shell 脚本 hello world
  • 创建一个伟大编程项目 —Hello World

    # 创建一个Helloword.sh 文件
    [root@aly_server01~]# touch Helloword.sh
    
    # 编辑Helloword.sh 文件
    [root@aly_server01~]# vim Helloword.sh
    [root@aly_server01~]# cat Helloword.sh 
    #!/bin/bash
    # This is ower first shell
    # by author rivers 2021.09
    echo "hello world"
    [root@aly_server01~]# 
    [root@aly_server01~]# ll Helloword.sh 
    -rw-r--r-- 1 root root 85 Sep 20 22:26 Helloword.sh
    
    # 赋予执行权限
    [root@aly_server01~]# chmod o+x Helloword.sh 
    
    # 运行helloword.sh 脚本
    [root@aly_server01~]# ./Helloword.sh 
    hello world
    [root@aly_server01~]# 
    
二、shell 环境变量讲解 2.1 shell 变量详解
  • 环境变量介绍

    # 什么是变量
    很多人可能会说,可以变化的量就是变量。但是发现很多汉语意思很强大,你看的懂的字,却不一定可以理解它的意思。这里你可以理解为 a = 1,同时还可以 a =2、a = 3 ,不同的值都可以复制给同一个 变量 a 。
    
    # 常见的3种变量
    Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,Shell变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间不能有空格,可以使用下划线(_),不能使用(-),也不能使用标点符号等。
    
    # 简单的变量介绍
    [root@keeplived_server~]# a=18
    [root@keeplived_server~]# echo $a
    18
    
    
2.2 shell 系统变量 介绍
  • 系统变量

    # Shell常见的变量之一系统变量,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下:
    
    $n 		当前脚本的名称;
    = 		当前脚本的第n个参数,n1,2$*,…9;
    ( 		当前脚本的所有参数)不包括程序本身$#( 		当前脚本的参数个数)不包括程序本身$?$$ 		令或程序执行完后的状态,返回0表示执行成功;
    #Shell常见的变量之二环境变量,主要是在程序运行时需要设置,环境变量详解如下: 		程序本身的PID号。
    
    
2.3 shell 环境变量 介绍 2.3.1 常见的系统环境变量
  • 环境变量介绍

    PATH
    
    HOME  		命令所示路径,以冒号为分割;
    SHELL  		打印用户家目录;
    USER 		显示当前Shell类型;
    PWD  		打印当前用户名;
    ID    		打印当前用户id信息;
    TERM   		显示当前所在路径;
    HOSTNAME  		打印当前终端类型;
    PS1    显示当前主机名;
    HISTSIZE         定义主机命令提示符的;
    ;    历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间RANDOM
    0      随机生成一个 32767; 的整数HOSTNAME
    # 常见的变量之三用户变量,用户变量又称为局部变量,主要用在Shell脚本内部或者临时局部使用,系统变量详解如下:    主机名
    
2.4 shell 用户环境变量 介绍 2.4.1 自定义shell环境变量
  • 用户自定义变量

    a
    =Httpd_sortrivers 				       自定义变量A;
    =BACK_DIRhttpd-2.4.6-97.tar  自定义变量N_SOFT;
    =IPaddress/data/backup/         自定义变量BACK_DIR;
    =10.0# echo 打印httpd-2.4安装步骤.0.1			   自定义变量IP1;
    
    
2.4.2 echo 打印菜单栏
  • 使用echo 打印菜单栏,显示http-2.4安装过程

    [
    ]root@web-server01~# touch httpd_2.4_install.sh# 赋予执行权限
    
    [
    ]root@web-server01~# chmod o+x httpd_2.4_install.sh[
    ]root@web-server01~# ./httpd_2.4_install.sh #!/bin/bash
    
2.4.3 shell 中彩色输出 helloworld
  • echo -e 扩展

    # This is echo color shell
    # by author rivers 2021.09-23
    # 字体颜色
    for
    i in 31 {..37};do echo
    3 -e "$i[3;40mHello world!done[0m"
    # 背景颜色
    for
    i in 41 {..47};do echo
    3 -e "${i}[47;3mHello world!done[0m"
    # 显示方式
    for
    i in 1 {..8};do echo
    3 -e "$i[3;31;40mHello world!done[0m"
    # If条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断
    
    
三、shell 编程流程控制语句 3.1 if 条件语句介绍 3.1.1 常用的单/双分支
  • if 条件语句

    # 单分支语句 ---比较大小
    
    if
    	( )条件表达式;thenfi
    		语句1
    	# 双分支if 语句
    
    if
    	( )表达式else
    		语句1
    	fi
    		语句2
    	# 多支条件语句 ---判断成绩
    
    if
    	( )表达式elif
    		语句1
    	elif
    		语句2
    	fi
    		语句2
    	if  
    
    
    
3.1.2 if 常见判断逻辑运算符详解
  • 常见逻辑判断运算符

    -f	 	判断文件是否存在 eg: [ ] -f filename if;
    -d	 	判断目录是否存在 eg: [ dir -d ]     ||;
    -eq		等于,应用于整型比较 equal;
    -ne		不等于,应用于整型比较 not equal;
    -lt		小于,应用于整型比较 letter;
    -gt		大于,应用于整型比较 greater;
    -le		小于或等于,应用于整型比较;
    -ge 	大于或等于,应用于整型比较;
    -a		双方都成立(and) 逻辑表达式 –a 逻辑表达式;
    -o		单方成立(or) 逻辑表达式 –o 逻辑表达式;
    -z		空字符串;
    -x      是否具有可执行权限
    &&      单方成立;
    #!/bin/bash      双方都成立表达式。
    
3.1.3 使用单分支语句判断crond 进程是否在运行—案例
  • 判断 crond 服务是否运行

    # this is check crond
    # by author rivers on 2021-9.23
    # 定义一个变量名
    
    name
    =numcrond
    =$(ps| -efgrep| $namegrepgrep -vc )if
    [ $num 1 -eq ] ;thenecho
        $num "else running!"
    echo
        $num "fi is not running!"
    #!/bin/bash
    
3.1.4 判断系统目录是否存在 —案例
  • 判断系统目录是否存在

    # this is check directory 
    # by author rivers on 2021-9.27 
    if
     [  !  !  -d  /data/rivers  -a  ]  -d  /tmp/rivers  mkdir;then
     # if 语句可以直接对命令状态进行判断,就省去了获取$?这一步!  -p  /data/rivers  f
     i
    
3.1.5 多个条件判断学生分数等级 — 案例
  • 判断学生成绩等级

    # 如果第一个条件符合就不再向下匹配
      #!/bin/bash
    # this check grade shell
      # by author rivers on 2021-09-27
      grade
      
      =if
      [ $grade 90 -gt ] ;thenecho
        "Is's very good!" elif
      [ $grade 70 -gt ] ;thenecho
        "Is's is good!" elif
      
      [ $grade 60 -ge ] ;thenecho
        "pass" else
      
      echo
        "no pass" fi
      #格式:for name [ [ in [ word ... ] ] ; ] do list ; done
    
3.2 for 循环语句介绍
  • for 循环语句

    for
      in 变量名 ; 取值列表do 1
        语句 done
      #!/bin/bash
    
    
3.2.1 检查同一局域网 多台主机是否存活
  • 检查多台主机存活情况

    # check hosts is on/Off
    # by rivers on 20219-23
    Network
    
    =for
    Host in $( seq1 254 )do
    ping
    1 -c $Network .$Host&& > /dev/null result =0|| result =1if
    
    [ $result "==" 0 ] ;thenecho
      3 -e "$Network[32;1m$Host.3 is up echo[0m"
      $Network "$Host.else" >> /tmp/up.txt
    
    echo
      3 -e "$Network[;31m$Host.3 is down echo[0m"
      $Network "$Host.fi" >> /tmp/down.txt
    done
    # While循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾与 
    
3.3 while 循环语句介绍
  • while 循环语句

    #while 关联的还有一个 until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比较少,这里不再讲解。
    while
    
    (  )表达式do
    done
      语句1
    # break 和 continue 语句
    
    
  • break 和 continue 语句

    break
      continue 是终止循环。
      #示例 1:在死循环中,满足条件终止循环 是跳出当前循环。
    while
    true ;do let
      if N++
      [ $N 5 -eq ] ;then break
        fi
    echo
      $N done
    1
    输出: 2 3 4 #示例 2:举例子说明 continue 用法
    
    N
    =0while
    [ $N 5 -lt ] ;do let
      if N++
    [ $N 3 -eq ] ;then continue
      fi
    echo
      $N done
    1
    
    输出: 2 4 # 打印 1-100 数字
    
    i
    =0while
    (( <=i100))do
    echo
            $i  i
            =`expr1 $i + `done
    #!/bin/bash
    
    
3.3.1 While循环求1-100的总和 —案例
  • 求1-100的总和

    # by author rivers on 2021-9-27
    j
    =0i
    =1while
    (( <=i100))do
    j
         =`expr` $i + $j((
         ++i))done
    echo
    $j [
    
    
3.3.2 每10秒循环判断一次 hbs用户是否登录系统 —案例
  • 每 10秒 循环判断系统登录

    ]root@web-server01~/script# vim login.sh #!/bin/bash
    #Check File to change. 
    #By author rivers 2021-9-27
    USERS
    ="hbs"while
    true do
    echo
            ` "The Time is date` +%F-%Tsleep"
            10 NUM
            =`who|grep$USERS "|"wc` -lif
            [ [$NUM 1 -ge ] ];thenecho
                    $USERS "The fi is login in system."
            done
    #Case选择语句,主要用于对多个选择条件进行匹配输出,与if elif语句结构类似,通常用于脚本传递输入参数,打印出输出结果及内容,其语法格式以Case…in开头,esac结尾。语法格式如下:
    
    
3.4 case 选择语句介绍
  • case 选择语句

    case
    in 模式名  1
      模式 );
        命令
        ;2
      模式 );
        命令
        ;)
    *esac
    不符合以上模式执行的命令
    # 每个模式必须以右括号结束,命令结尾以双分号结束。
    [
    
3.4.1 使用case 编写一个 httpd 服务启动脚本
  • 编写 http服务启动脚本

    ]root@web-server01~/script# vim httpd_start.sh # check http server start|stop|starus
    # by author rivers on 2021-9-27
    while
    true do
    echo
        3 -e "
        3[31m start 3[0m
        3[32m stop 3[0m 
        3[33m status 3[0m
        3[34m quit read[0m 
    "
    "请输入你的选择start|stop|quit:" -p case char
    $char in )
    start&&
        systemctl start httpd echo "httpd服务已经开启" || echo "开启失败" ;
    ;)
    stop&&
        systemctl stop httpd echo "httpd服务已经关闭" || echo "关闭失败" ;
    ;)
    restart&&
        systemctl restart httpd echo "httpd服务已经重启" || echo "重启失败
    " ;
    ;)
    status&&
        systemctl status httpd echo ; -e "
            httpd 的服务状态
      
    ;)
    quit#select 是一个类似于 for 循环的语句
    
    
    
3.5 select 选择语句介绍
  • select 选择语句

    #Select语句一般用于选择,常用于选择菜单的创建,可以配合PS3来做打印菜单的输出信息,其语法格式以select…in do开头,done结尾:
    select
    
    i in do (表达式) 
    done
    语句
    # 选择mysql 版本
    
    #!/bin/bash
    # by author rivers on 2021-9-27
    PS3
    ="Select a number: "while
    true ;do select
    mysql_version in 5.1 5.6 ; quitdo
     case
      $mysql_version in 5.1
      )echo
        "mysql 5.1" break
          ;
          ;5.6
      )echo
        "mysql 5.6" break
           ;
           ;)
      quitexit
        ;
        ;)
      *echo
        "Input error, Please enter again!" break
          esac
    done
     done
    #!/bin/bash
    
3.5.1 使用select 打印lnmp 菜单栏 —案例
  • 打印lnmp选择菜单

    #by author rivers on 2021-9-27
    PS3
    ="Please enter you select install menu:"select
    i in do http php mysql quit
    case
    $i in )
            httpecho
            3 -e "
                    3[31m Test Httpd ;[0m" 
            ;)
            phpecho
            3  -e "3[32m Test PHP;[0m"
            ;)
            mysqlecho
            3 -e "3[33m Test MySQL.;[0m"
            ;)
            quitecho
            3 -e "3[32m The System exit.exit[0m"
            esac
    done
    # Shell允许将一组命令集或语句形成一个可用块,这些块称为Shell函数,Shell函数的用于在于只需定义一次,后期随时使用即可,无需在Shell脚本中添加重复的语句块,其语法格式以function name(){开头,以}结尾。
    
    
3.6 shell 函数、数组 编程 实战
  • 函数

    # Shell编程函数默认不能将参数传入()内部,Shell函数参数传递在调用函数名称传递,例如name args1 args2。
    
    # 函数语法
    
    func
    ()} {
    command1
    command1
    ……
    # 直接调用函数名
    fun  # Shell 函数很简单,函数名后跟双括号,再跟双大括号。通过函数名直接调用,不加小括号。
    #!/bin/bash
    func
    ()VAR {
    =$((1+1))return
    $VAR echo
    "This is a function." }
    echo
    func
    $? # bash test.sh 
    2
    # 数组是相同类型的元素按一定顺序排列的集合。
    
  • 数组

    =
    格式:array(1元素 2 元素 3 元素 .. ).1
    用小括号初始化数组,元素之间用空格分隔。
     定义方法 array:初始化数组 =()a b c2
     定义方法 [:新建数组并添加元素 array]下标=3元素
     定义方法 =:将命令输出作为数组元素array($(command))[
    
    
3.6.1 定义一个httpd 安装的函数 —案例
  • 创建apache软件安装函数

    ]root@web-server01~/script# vim xx.sh #!/bin/bash
    #auto install apache
    #By author rivers 2021-09-27 
    #Httpd define path variable
    FILES
    =LES_DIRhttpd-2.2.31.tar.bz2
    =URLhttpd-2.2.31
    =PREFIXhttp://mirrors.cnnic.cn/apache/httpd/
    =function/usr/local/apache2/
    Apache_install ( )#Install httpd web server 
    {
    if
    [ [ ""1"" -eq ] ];thenwget
            $URL -c $FILES/&& tar  $FILES -jxvf && cd $FILES_DIR && if./configure
            [ $? 0 -eq ] ;thenmake
                    && make install echo
                    \n -e "3\[32m--------------------------------------------
                    echo -e "[033$FILES_DIR32mThe ! Server Install Success \[033else0m
            echo
                    \ -e "[033$FILES_DIR32mThe install Make or Make exit ERROR,Plea
                    0 fi
            fi
    }
    1
    Apache_install # 调用函数,传参为1
    #方法 1:
    
    
3.6.2 遍历数组元素 — 案例
  • 遍历数组元素

    #!/bin/bash
    IP
    =(10.010.0.0.1 10.0.0.2 ).0.3for
    (( =i0;<i*${#IP[;]}++i));do echo
    [ ${IP]$idone}
    # bash test.sh
    10.0
    10.0.0.1
    10.0.0.2
    #方法 2:.0.3
    
    #!/bin/bash
    IP
    =(10.010.0.0.1 10.0.0.2 ).0.3for
    IP   in   [ ${IP]*;}do echo
    $IP done
    #!/bin/bash 
    
四、shell 编程实战 案例 4.1 shell 脚本实战之 系统备份脚本 —案例
  • Tar工具全备、增量备份网站,Shell脚本实现自动打包备份

    #Auto Backup Linux System Files
    #by author rivers on 2021-09-28
    SOURCE_DIR
    
    =($*
        )
    TARGET_DIR
    =YEAR/data/backup/
    =`date` +%YMONTH
    =`date` +%mDAY
    =`date` +%dWEEK
    =`date` +%uA_NAME
    =`date` +%H%MFILES
    =CODEsystem_backup.tgz
    =$?if
    [
        $* -z "]" echo;then
        3 -e "\n[32mUsage:\nPlease Enter Your Backup Files or Directories\n--------------------------------------------\n3Usage: { exit /boot /etc}fi[0m"
        #Determine Whether the Target Directory Exists
    if
    [
    !
        $TARGET_DIR $YEAR -d $MONTH/$DAY/]/mkdir $TARGET_DIR;then
        $YEAR -p $MONTH/$DAY/echo/3
        $TARGET_DIR -e "3[32mThe fi Created Successfully !#EXEC Full_Backup Function Command[0m"
    Full_Backup
    (
    )if[
    {
    $WEEK
        "7" "]" -eq rm $TARGET_DIR;then
        cd -rf $TARGET_DIR/snapshot
        $YEAR $MONTH/$DAY/$TARGET_DIR/$FILES ;tar -g [/snapshot -czvf ] ${SOURCE_DIR[@$CODE}
        == ""0"" ] && echo\n3 -e  "--------------------------------------------3fi[32mThese Full_Backup System Files Backup Successfully !}[0m"
    #Perform incremental BACKUP Function Command
    Add_Backup
    (
    )if[
    {
       $WEEK
            "7" ] -ne cd $TARGET_DIR;then
            $YEAR $MONTH/$DAY/$TARGET_DIR/$A_NAME ;tar -g $FILES/snapshot -czvf [] ${SOURCE_DIR[@$CODE}
            == ""0"" ] && echo\n3 -e  "-----------------------------------------$TARGET_DIR$YEAR[32mThese Add_Backup System Files $MONTH/$DAY/${YEAR}/$A_NAME/$FILES_3fi Backup Successfully !}[0m"
       sleep
    3
    cat << 
    Full_Backup;Add_Backup
    
    
4.2 shell 脚本 实战 之收集系统信息 —案例
  • Shell脚本实现服务器信息自动收集

    EOF
    ++++++++++++++++++++++++++++++++++++++++++++++
    ++++++++Welcome to use system Collect+++++++++
    ++++++++++++++++++++++++++++++++++++++++++++++
    EOF ip_info=
    `ifconfig|grep "Bcast"| tail|awk -1 | '{print cut}'2` -d: -f cpu_info1=
    `cat|grep /proc/cpuinfo 'model name'| tail|awk -1 | -F: '{print sed}''s/^ //g'| awk '{print ,$NF,`,cpu_info2}'=
    `cat|grep /proc/cpuinfo "physical id"| sort|uniq |wc -c`serv_info -l=
    `hostname|tail `disk_info -1=
    `fdisk|grep -l"Disk"| grep"identifier"| -v awk '{print ,|,sed}''s/,//g'` mem_info=
    `free|grep -m "Mem"| awk '{print "Total",`,load_info"M"}'=
    `uptime|awk $() '{print "Current Load: "|NF-2sed}''s/\,//g'` mark_info=
    'BeiJing_IDC'echo3
    3 -e "echo[32m-------------------------------------------${ip_info}[1m"
    echo IPADDR:HOSTNAME
    : $serv_infoecho${cpu_info1}
    ${cpu_info2} CPU_INFO:echo X$disk_info
    echo DISK_INFO:$mem_info
    echo MEM_INFO:$load_info
    echo LOAD_INFO:3
    3 -e "echo[32m-------------------------------------------3[0m"
    3 -e -n "if[36mYou want to write the data to the databases? [[1m" ;read ensure
    
    $ensure      == ""yes"" $ensure == -o ""y"" $ensure == -o ""Y"" ] ; thenecho"--------------------------------------------"
            echo 3
            ' "insert into audit_system values(' -e  '${ip_info}[31mmysql -uaudit -p123456 -D audit -e ''$serv_info','${
    cpu_info1}','${cpu_info2}','$disk_info X$mem_info','$load_info','$mark_info',')','3'(" ''' ''[0m '
            mysql -uroot -p123456 -D test -e "insert into audit_system values${ip_info}$serv_info,'${cpu_info1}','${cpu_info2}','$disk_info X$mem_info
    ','$load_info','$mark_info',')','"
    else
            echo "'....Please wait,exit..exitfi"
            [
    ]
    
    
4.3 shell 脚本实战 之 一键部署 lnmp 架构 — 案例
  • 批量部署lnmp 架构

    # vim lnmp.sh root@web-server01~/script#!/bin/bash#install lnmp
    #by author rivers on 2021-9-28
    # nginx 环境准备
    Nginx_url
    
    =
    Nginx_prefix=https://nginx.org/download/nginx-1.20.1.tar.gz
    # mysql 环境准备Mysql_version/usr/local/nginx
    
    =
    Mysql_dir=mysql-5.5.20.tar.gz
    Mysql_url=mysql-5.5.20
    Mysql_prefix=https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.20.tar.gz
    # php 环境准备Php_version/usr/local/mysql/
    
    =
    Php_prefix=php-7.2.10.tar.gz
    functionnginx_install/usr/local/php-7.2.10/
    
    
    ( )if[{
    
    [ "1" "]" -eq ] ;thenif[
            $? 0 ] -eq ; thenmake&&
                    make install fi fi
            }
    
    function
    mysql_install
    
    
    
    ( )if[{
    [ "2" "]" -eq ] ;then=\
    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
    -DMYSQL_DATADIR=/data/mysql \
    -DSYSCONFDIR=/etc \
    -DMYSQL_USER=mysql 3306
    -DMYSQL_TCP_PORT\= 1
    -DWITH_XTRADB_STORAGE_ENGINE\= 1
    -DWITH_INNOBASE_STORAGE_ENGINE\= 1
    -DWITH_PARTITION_STORAGE_ENGINE\= 1
    -DWITH_BLACKHOLE_STORAGE_ENGINE\= 1
    -DWITH_MYISAM_STORAGE_ENGINE\= 1
    -DWITH_READLINE\= 1
    -DENABLED_LOCAL_INFILE\= 1
    -DWITH_EXTRA_CHARSETS\= \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DEXTRA_CHARSETSechoall 3
                    $Mysql_dir -e "3[32mThe else Server Install Success !echo[0m"
            3
                    $Mysql_dir -e "exit[32mThe 0 Make or Make install ERROR,Please Check......"
                    fi chmod
    chkconfig
    /bin/cp support-files/my-small.cnf  /etc/my.cnf
    /bin/cp support-files/mysql.server /etc/init.d/mysqld
    chkconfig +x /etc/init.d/mysqld
    fi --add mysqld
    } mysqld on
    function
    php_install
    
    
    ( )if[{
    [ "3" "]" -eq ] ;thenif[
            $? 0 ] -eq ; thenmakeZEND_EXTRA_LIBS
                    = '-liconv'&&make install if [
    [ "3" "]" -eq ] ;thenwget$Php_url
     && tar $Php_version && xf cd $Php_dir && install && yum =   bxml2* bzip2* libcurl*  libjpeg* libpng* freetype* gmp* libm
    crypt* readline* libxslt* -y $Php_prefix ./configure --prefix== --disable-fileinfo --enable-fpm --with-config-file-path=/etc --wi
      -config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc --with-jpeg-dir --w
    ith-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --enable-
    mysqlnd --with-mysqli=mysqlnd --with-pdo-mysqlifmysqlnd --with-mysql-sock[/var/lib/mysql/mysql.sock --without-pear --enable-bcmath
            $? 0 ] -eq ; thenmakeZEND_EXTRA_LIBS
                    = '-liconv'&&make install echo \n
                    3 -e "3echo[32m-----------------------------------------------3[0m"
                    $Php_version -e "3[32mThe else Server Install Success !echo[0m"
            3
                    $Php_version -e "exit[32mThe 0 Make or Make install ERROR,Please Check......"
                    fi fi
            }
    PS3
    =
    
    
    "Please enter you select install menu:"selecti
    in do "lnmp.sh" nginx mysql php quit
    [
    ] 113L, 3516C written                                                                                   
    # vim lnmp.sh root@web-server01~/scriptchkconfigchkconfig
    fi --add mysqld
    } mysqld on
    function
    php_install
    
    
    ( )if[{
    [ "3" "]" -eq ] ;thenif[
            $? 0 ] -eq ; thenmakeZEND_EXTRA_LIBS
                    = '-liconv'&&make install echo \n
                    3 -e "3echo[32m-----------------------------------------------3[0m"
                    $Php_version -e "3[32mThe else Server Install Success !echo[0m"
            3
                    $Php_version -e "exit[32mThe 0 Make or Make install ERROR,Please Check......"
                    fi fi
            }
    PS3
    =
    
    
    "Please enter you select install menu:"selecti
    in do case nginx mysql php quit
    $i
    
    in ) 1
            nginx;
            nginx_install ;
            )2
            mysql;
            mysql_install ;
            )3
            php;
            php_install ;
            )exit
            quitesac
            done
    
    
    
总结

shell 是我们工作中很重要的一部分,在工作中充当着重要的角色。企业生产环境中,服务器规模成百上千,如果依靠人工去维护和管理是非常吃力的,基于Shell编程脚本管理和维护服务器变得简单、从容,而且对企业自动化运维之路的建设起到极大的推动作用。

所以,不管是你看到哪里的书籍、资料、还是视频,每个老师讲的侧重点都不一样,但是基础是一样的,要想学号shell,需要反复动手写,思考,理解shell 的精髓,才能掌握shell ,写好shell。

以梦为马,不负韶华,流年笑掷,未来可期!
                     —黄昏

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/733306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存