阶段八:shell脚本之基础语法

一、Shell基础知识

Shell概述

Shell是一个命令解释器,系统的"命令翻译官",负责解释和执行用户输入的命令或程序。工作方式分为:

核心功能

image

Shell脚本

把多个命令写入一个文件,让系统自动按顺序执行,就组成了Shell脚本。

Shell脚本是批量命令的集合​,让系统自动完成重复任务。类似Windows的.bat批处理文件,但更强大。

应用场景

1、简化传统运维流程

2、编写日常巡检脚本

3、软件安装配置流程化

4、方便进行日志分析与处理 => 软件日志 => 系统日志/var/log

案例:输出日志

#!/bin/bash
cd /var/log
cat /dev/null > messages
echo "Log cleaned up."

命令作用:

执行结果:

关键参数:

注意事项:


**关键参数:**

**注意事项:**



变量核心作用?存储数据

变量有三句话:

1、变量存储数据的容器 

2、变量中存储的数据是临时的

3、变量中存储的数据可以发生变化



1、变量名称只能由**字母、数字或下划线**组成

2、不能以**数字**开头

3、严格**区分大小写**


判断题:






1、变量的命名规则


2、建议使用英文单词或者拼音作为变量名称


变量可以分为两大类:**环境变量(全局变量)**和**普通变量(局部变量)**;


环境变量也可称为全局变量,可以在创建它们的Shell及其派生出来的任意子进程Shell中使用。

环境变量又可以分为bash内置的环境变量、自定义环境变量。


普通变量也可以称为局部变量,只能在创建它们的Shell函数或Shell脚本中使用。

普通变量一般由开发者在开发脚本程序时创建。






Java程序运行过程中,可以通过环境变量自动寻找JDK相关信息,方便程序运行

注意事项:

环境变量对所有进程有效;

在命令行中定义的环境变量只在当前会话中有效,一旦退出,变量就会消失;

按照系统规范,所有环境变量的名字均采用大写形式。

在将环境变量应用于用户进程程序之前,都应该用export命令导出定义。

有一些环境变量,比如 HOME(用户家目录)、 PATH(命令搜索路径)、 USER(用户名)、 PWD(当前工作目录) 等,这些变量在用户登录时由系统自动设置。


**注意事项:**


比如,
或者先赋值,再导出
    JAVA_VERSION="11.0.2"
    等价于

关键参数:

注意事项:

注意事项:


用env(printenv)显示默认环境变量:

用set也可以显示环境变量(包括局部变量):


 显示环境变量

注意事项:

用unset消除本地变量和环境变量


**注意事项:**



在Shell脚本编程中,变量一共分为(环境变量)和(普通变量/局部变量)?

环境变量在定义时,建议变量名称(全大写)

配置环境变量时,如果在命名行通过export定义,是临时的还是永久的?临时的

如果想配置为永久,可以放置在哪些文件?(`/etc/profile`、`/etc/bashrc`、`~/.bash_profile`或`~/.bashrc`)




/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc

这些文件可统称为系统环境文件。bash检查的环境变量文件的情况取决于系统运行Shell的方式。

系统运行Shell的方式一般有3种:

1、通过系统用户登录后默认运行的Shell(/bin/bash)

3、执行脚本运行非交互式Shell

当用户登录Linux系统时,Shell会作为登录Shell启动。

此时登录Shell加载环境变量顺序:

image

用户登录系统后首先会加载/etc/profile全局环境变量文件,这是Linux系统上默认的Shell主环境变量文件。系统上每个用户登录都会加载这个文件。

小结:

中午留一个小作业:把MySQL安装封装成一个Shell脚本

要求1:能自动安装MySQL软件

要求2:把随机密码放入/root/mysql_pass.txt文件中

第一种方式是在/etc/motd里增加提示的字符串,如下:


**注意事项:**

注意事项:

在定义文本(字符串)时,单引号和双引号效果一致的,但是如果定义的文本内容中存在变量时。两者有所不同:

变量定义时,变量的内容可以用单引号或双引号引起来,也可以不加引号。

a=192.168.88.100 b='192.168.88.100' c="192.168.88.100"


**注意事项:**

a=192.168.88.200
b='192.168.88.200'
c="192.168.88.200"

a=192.168.88.100-$a
b='192.168.88.100-$b'
c="192.168.88.100-$c"

注意事项:

把一个命令的结果作为变量的内容赋值的方法

对需要获取命令结果的变量内容赋值的常见方法有两种:


案例演示:

CMD1=`ls`

注意事项:

CMD2=$(pwd)


**注意事项:**


%F:年-月-日
%Y-%m-%d:年-月-日

注意事项:

在Shell中存在一些特殊且重要的变量,例如\$0、\$1、\$#,我们称之为特殊位置参数变量。要从命令行、函数或脚本执行等处传递参数时,就需要在Shell脚本中使用位置参数变量。

案例演示:

#!/bin/bash


**注意事项:**

#!/bin/bash

注意事项:

算术运算:默认情况下,Shell就只能支持简单的整数运算




案例:

注意事项:

i=1


**注意事项:**

j=1

注意事项:

i=1;j=1


Shell运算符是否能实现小数运算呢?答:默认不可以,但是可以结合bc命令实现。

2.5

注意事项:


**注意事项:**