Shell编程基础知识

关于shell编程基础:

1.为什么要学习shell编程?

Linux系统中会大量的使用Shell,工作中我们也需要自动化实现业务。

Web集群架构会用到shell编程基础。

例如: 自动备份,监控,自动安装服务。

Shell编程是Linux运维人员必须要会的编程语言。最简单的编程语言。

编程也是运维人员必须具备的本领:

shell、python是运维人员必须具备的本领。

------------------------------------------------------------------------------------------------------

2.什么是shell?

shell 就是一个命令解释器(翻译官),,它在操作系统的最外层,负责直接与用户进行对话,

将用户输入的命令翻译给操作系统,并将处理的结果输出至屏幕。

当然shell命令存在交互式、和非交互式的两种方式。

交互式:就是日常使用最多的一种模式、登录终端、执行命令、返回结果。

再次输入命令,然后等待结果。最后结束工作退出shell会话。当退出shell会话后,

当前的shell会话也就终止了。

非交互式:在这种模式下,shell不与你进行交互,而是直接读取某个文件进行

执行。那文件中都有什么,“其实就是一些命令”。当然文件从头执行到结尾,结束后,

当前shell也就终止了。

------------------------------------------------------------------------------------------------------

3.什么是shell脚本?

1)将系统命令椎积在一起,顺序执行(系统命令椎积).

2)特定的格式+特定的语法+系统的命令=文件

4.shell脚本能做什么(shell其实就是基于标准之上的-->脚本工具)

1)基础配置:系统初始化操作、系统更新、内核调整、网络等

2)安装程序:部署LNMP、LAMP、MySQL、Nginx、Redis

3)配置变更:Nginx Conf、PHP Conf、MySQL Conf、Redis Conf

4)业务部署:

5)日常备份:

6)信息采集

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

8)服务扩容:

9)服务缩容:

注意:shell脚本主要的作用是简化步骤,提高效率,减少人为干预,

减少系统故障。

------------------------------------------------------------------------------------------------------

5.shell 规范

1)脚本存放在固定的目录/script

2)开头加!/bin/bash 作用:告诉脚本使用的是那种命令解释权器。

如,不指shell,默认以bash执行。

3)附带作者及版权信息。

4)脚本扩展名为 *.sh

5)脚本中不用中文。

6)成对的符号一次书写完成

7)循环格式一次性输入完成。

------------------------------------------------------------------------------------------------------

6.执行方式:

bash test.sh  无需权限,直接调用解释器翻译

./test.sh    需要权限,同时需要定义对应的解释器,不定义默认bash

#!/usr/bin/bash

  脚本中如果不写,在执行的过程中如果./方式执行(需要权限),

默认调用bash命令翻译该文件。

  脚本中如果写了使用什么解释器翻译,那在使用./时则会调用对应的解释器执行。

7.shell 变量

1)什么是变量

变量是shell传递数据的一种方法,简单解释:就是用一个固定的字符串去

表示不固定的值,便于后续的引用。

2)命名规范

字母、数字、下划线几个组成,尽量字母开头(变量名最好是具备

一定的含义)

3)定义方式

1.自定义变量:人为定义变量名称。

2.系统环境变量:保存的是和系统操作环境相关的数据

3.位置参数变量:向脚本中进行参数传递,变量名不能自定义,变量作用是固定的。

4.预定义的变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

eg1:用户自定义变量示例,当前shell有效

[root@test shell]# var="hello shell"

hello shell

eg2:引用变量,$变量名 或 ${变量名}

[root@test shell]# echo $var_log

hello shell_log

小总结:

1.在定义变量的时候,比如:var="$(hostname)"

2.在引用变量的时候,尽可能的使用双引号 echo "$var"

3.在我们使用echo输出的时候,如果输出的字符串中有特殊的符号,

建议使用单引号 echo '#$123'

------------------------------------------------------------------------------------------------------

4)使用系统已定义好的环境变量

1.简单的使用一下系统的变量,当然也可以使用export打印当前系统所有的环境变量

[root@test  shell]# cat env.sh

#!/bin/bash

echo "用户的家目录:$HOME"

echo "当前主机名是:$HOSTNAME"

echo "当前所在目录:$PWD"

echo "当前连接服务器使用的地址和端口是:$SSH_CONNECTION"

2.如果系统的环境变量不满足要求,可以自定义:

(1)定义环境变量:export变量,将自定义变量转换成环境变量

[root@test shell]# var2=hello

[root@test shell]# echo $var2

hello

[root@test shell]# cat a.sh

#!/bin/bash

echo $var2

[root@test shell]# sh a.sh  #执行a.sh时,会使用另一个bash去执行,

就访问不到$var2 的值

[root@test shell]# export var2=hello #将变量转化为环境变量

[root@test shell]# sh a.sh  #再次执行脚本

  hello

------------------------------------------------------------------------------------------------------

5)预先定义变量参数示例,系统内置变量的使用方法

需要注意$* 和 $@ 区别:

1.脚本如下:

[root@test shell]# cat variable.sh

#!/bin/bash

echo "#当前shell脚本的文件名:$0"

echo "#第1个shell脚本位置参数:$1"

echo "#第2个shell脚本位置参数:$2"

echo "#第3个shell脚本位置参数:$3"

echo "#所有传递的位置参数:$*"

echo "#所有传递的位置参数:$@"

echo "#总共传递的参数个数是:$#"

echo "#当前程序运行的PID是:$$"

echo "#上一个命令执行的返回结果:$?"

[root@test shell]# sh variable.sh 11 22 33 44 55 66

#当前shell脚本的文件名:variable.sh

#第1个shell脚本位置参数:11

#第2个shell脚本位置参数:22

#第3个shell脚本位置参数:33

#所有传递的位置参数:11 22 33 44 55 66

#所有传递的位置参数:11 22 33 44 55 66

#总共传递的参数个数是:6

#当前程序运行的PID是:21293

#上一个命令执行的返回结果:0

------------------------------------------------------------------------------------------------------

例子:

#!/bin/bash

test(){

      echo "末加引号,二者相同"

      echo $*

      echo $@

    echo "加入引号后对比"

    echo "---"\s*---""

        for N in "$*"

do

  echo $N

done

    echo "---"\$@---""

    for N in "$@"

    do

      echo $N

    done

}

test 11 22 33

------------------------------------------------------------------------------------------------------

[root@test shell]# sh tt.sh

末加引号,二者相同

11 22 33

11 22 33

加入引号后对比

---$*---

11 22 33

----$@---

11

22

33

------------------------------------------------------------------------------------------------------

总结:可以看见不加引号时,二者都是返回传入的参数,但是加了

引号后,此时$a把参数作为一个字符串整体(单字符串)返回,

$@把每个参数作为一个字符串返回

------------------------------------------------------------------------------------------------------

6)补充:将命令执行的结果传递给变量.(命令替换)

#根据系统时间,打印几年时间和明年时间

[root@test shell]# echo "This is $(date +%Y) year"

This is  2019 year

[root@test shell]# echo "This is $((date +%Y)+1) year"

This is  2020 year

===================================================

你可能感兴趣的:(Shell编程基础知识)