第一章 Shell基本概述

1. Shell课程大纲介绍

01)Shell基本概述

02)Shell变量定义

03)Shell数值运算

04)Shell流程控制

05)Shell循环语句

06)Shell数组函数

07)Shell内置命令

08)Shell正则表达式

2. 什么是Shell ?

Shell是一个命令解释器,它的作用是解释和执行用户输入的命令及程序等,用户输入一条命令,Shell就解释执行一条。

Shell存在于操作系统的最外层,负责直接与用户对话,把用户输入的命令解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户,当我们输入系统用户名和密码,登录到Linux后的所有操作都是由Shell解释并执行的。

Shell命令是存在交互式和非交互式的两种方式。

   什么是交互式:交互式模式就是在终端上执行,Shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式,是因为Shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,Shell也终止了。
   那什么又是Shell非交互式:非交互式模式,以Shell Script(非交互)方式执行。在这种模式下,Shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,Shell也就终止了。

? 可以通过打印"$-"变量的值(代表着当前设置的Shell选项),来区分交互式与非交互式Shell。

[[email protected] ~]# echo $-
himBH          #交互式Shell   

[[email protected] ~]# cat 1.sh
#!/bin/bash
echo $-

[[email protected] ~]# sh 1.sh
 hB            #非交互式Shell

各个字符所代表的含义:

01)h:hashall,打开这个选项后,Shell会将命令所在的路径记录下来,避免每次都要查询。
02)i:interactive,包含这个选项说明当前的Shell是一个交互式的Shell。
03)m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。
04)B:braceexpand,大括号扩展。
05)H:history,Shell会把我们执行的命令记录下来,可以通过history命令查看。

3. 什么是Shell脚本 ?

01)系统的命令堆积在一起,按照顺序执行。
02)特定的格式 + 特定的语法 + 系统的命令 = 文件
03)以.sh为结尾的文件

4. 为什么要学Shell编程 ?

    Shell脚本语言是实现Linux系统管理及自动化运维重要且必备的工具,Linux系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。每一个合格的Linux系统管理员或运维工程师,都需要熟练Shell脚本语言的编写,并能够阅读系统及各类软件附带的Shell脚本内容,只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复性的工作,从而为个人的职场发展奠定较好的基础。

5. 学习Shell编程需要哪些知识 ?

01)对vim编辑器能熟练使用,熟悉SSH终端及".vimrc"等的配置。
02)要有一定的Linux命令基础,至少掌握80个以上Linux常用命令并能熟练使用。
03)要熟练掌握Linux正则表达式以及三剑客命令(grep、sed、awk)。
04)熟悉常见的Linux网络服务部署、优化、日志分析及排错。

6. 如何学好Shell编程 ?

01)阅读、模仿、阅读、模仿
02)核心:多练--多思考--再练--再思考--坚持如此循环即可
03)掌握Shell脚本的各种常见语法
04)形成自己的脚本开发风格
05)从简单做起,简单判断,简单循环
06)多模仿、多离开参考资料练习、多思考
07)学会分析问题,逐渐形成编程思维
08)编程变量名字规范,采用驼峰语法表示
09)不要拿来主义,特别针对新手

7. Shell脚本能做什么 ?

01)基础配置:系统初始化操作、系统更新、内核调整、网络、时区、SSH优化等。
02)安装程序:LNMP、LAMP、MySQL、Nginx、Redis等。
03)配置变更:Nginx Conf、PHP Conf、MySQL Conf、Redis Conf等。
04)业务部署:Shell配合Git、Jenkins实现自动化部署PHP、Java代码,以及代码回滚。
05)日常备份:MySQL全备 + 增量 + binlog + crond + Shell脚本备份等。
06)信息采集:Zabbix + Shell: 对硬件、系统、服务、网络的监控等。
07)日志分析:ELK:取值->排序->去重->统计->分析等。
08)服务扩容/缩容:Zabbix + Shell
    扩容: 监控服务器cpu, 如cpu负载持续80% + 触发动作(脚本)
    脚本: 调用api开通云主机->初始化环境->加入集群->对外提供访问
    缩容: 监控服务器cpu使用率20%->判断有多少web节点->判断是否超过预设->缩减到对应的预设状态->变更负载的配置

8. Shell脚本开发规范及习惯

? Shell脚本开发规范及习惯非常重要,虽然这些规范不是必须要遵守的,但有了好的规范和习惯,可以大大提升开发效率,并降低后期对脚本的维护成本。当多人协作开发时,大家有一个互相遵守的规范就显得更重要了。哪怕是一个人开发,最好也采取一套固定的规范,这样脚本更易读、易于后期维护,最主要的是要让自己养成一个一出手就是专业和规范的习惯。

01)脚本放在放在统一的目录
# mkdir -p /scripts/
02)推荐使用vim编辑器编辑脚本(高亮显示)
03)以.sh为扩展名
04)规范的Shell脚本第一行会指出由哪个程序(解释器)来执行脚本中的内容。
#!/bin/bash 或 #!/bin/sh #如不指定Shell,默认以bash执行。
05)开头的"#!"称为幻数,在执行Shell脚本的时候,内核会根据"#!"后的解释器来确定使用哪个程序解释脚本中的内容。注意:这一行必须在每个脚本顶端的第一行,如果不是第一行则为脚本注释行。
06)附带作者及版权信息。
07)脚本注释:在Shell脚本中,跟在"#"后面的内容表示注释。注释部分不会被执行,仅给人看。注释可以自成一行,也可以跟在命令后面,与命令同行。要养成写注释的习惯,方便自己与他人。最好不用中文注释,因为在不同字符集的系统会出现乱码。
08)成对的符号一次书写完成。
09)循环的格式一次书写完成。

9. Shell脚本的执行方式

? Shell脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完了一个命令后再执行下一个,如果在Shell脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。

? 通常情况下,当Shell脚本执行时,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令以及子Shell脚本。

Shell脚本的执行通常可以采用以下几种方式:

1)bash script-name或sh                 #无需执行权限
[[email protected] ~]# cat oldboy.sh
#!/bin/bash
pwd
[[email protected] ~]# ll oldboy.sh
-rw-r--r-- 1 root root 16 2019-06-16 22:38 oldboy.sh
[[email protected] ~]# sh oldboy.sh
/root

2)path/script-name或./script-name    #必须要有执行权限
[[email protected] ~]# /root/oldboy.sh
-bash: /root/oldboy.sh: Permission denied
[[email protected] ~]# ./oldboy.sh
-bash: ./oldboy.sh: Permission denied
[[email protected] ~]# chmod +x oldboy.sh
[[email protected] ~]# /root/oldboy.sh
/root
[[email protected] ~]# ./oldboy.sh
/root

3)source script-name或.    #将脚本里的代码调入到当前环境运行,无需执行权限
[[email protected] ~]# cat test.sh
#!bin/bash
ping baidu.com
[[email protected] ~]# sh test.sh >/dev/null

#另打开一个会话窗口查看进程
[[email protected] ~]# ps -ef|grep test.sh
root 13351 13263 0 22:42 pts/2 00:00:00 sh test.sh
root 13387 13355 0 22:43 pts/0 00:00:00 grep --color=auto test.sh

#使用source来执行脚本
[[email protected] ~]# source test.sh >/dev/null

#另一个会话窗口查看进程
[[email protected] ~]# ps -ef|grep test.sh
root 13394 13355 0 22:43 pts/0 00:00:00 grep --color=auto test.sh
[[email protected] ~]# ps -ef|grep ping
root 15616 13965 0 09:47 pts/0 00:00:00 ping baidu.com
root 15620 15591 0 09:47 pts/1 00:00:00 grep --color=auto ping

4)cat script-name |bash        #将脚本里的代码调入到当前环境运行,无需执行权限

5)bash < script-name           #将脚本里的代码调入到当前环境运行,无需执行权限

10. 登录Shell和非登录Shell

登录shell:是需要用户名、密码登录后才能进入的Shell。

非登录shell:当然就不需要输入用户名和密码即可打开的Shell,例如:直接命令"bash"就是打开一个新的非登录Shell,在Gnome或KDE中打开一个"终端"(terminal)窗口程序也是一个非登录Shell。

执行exit命令,退出一个Shell(登录或非登录Shell);执行logout命令,退出登录Shell(不能退出非登录Shell)。

/etc/profile文件是登录Shell启动后运行的第一个启动脚本,它只为登录Shell运行;非登录Shell不会引发这个脚本。

#登录式shell配置文件执行顺序
/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc

每个调用的脚本会依次撤销前一个调用脚本中的改变,在退出登录Shell时,我们还可以执行某些任务,如创建自动备份、清除临时文件。把这些任务放在.bash_logout文件中。

#非登录式shell配置文件执行顺序
~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh

PS:验证使用echo在每行添加一个输出即可,注意,要把输出放在文件的第一行。

原文地址:https://www.cnblogs.com/chenmiao531759321/p/11724019.html

时间: 2024-10-12 23:11:41

第一章 Shell基本概述的相关文章

第一章软件开发概述思维导图

第一章软件开发概述思维导图

第一章:计算机网络概述

Asymmetric Digital Subscriber Line(非对称数字用户线) 亦可称作非对称数字用户环路.是一种新的数据传输方式.它因为上行和下行 带宽不对称,因此称为非对称数字用户线环路 mstsc 远程桌面连接 第一章:计算机网络概述 Citrix vSphere Hyper-v PKI RAS 活动目录组策略 1. 计算机网络在信息时代的作用 21世纪: 数字化.网络化.信息化 三网: 电信网络 计算机网络 优先电视网络 2. 因特网概述 1) 网络 许多计算机连接在一起 2)

(1)第一章:shell基本特性

1.1.打开终端后,就会出现一个提示符,其形式通常如下: [email protected]$ 或者是: [email protected]# 要么就简单地以$或#表示. ($表示普通用户,#表示超级用户(root user)). 1.2.linux下的所有脚本语言,都以#!后跟解释权路径这样一个被称为shebang的特殊行作为起始的.shell脚本常以#!/bin/bash起始. 有两种运行脚本的方式:一种是将脚本作为sh命令的参数,另一种是将脚本作为具有执行权限的可执行文件. 将脚本作为参数

OCP第一章:数据库概述

数据库DBA任务: 管理数据库可用性 设计并创建数据库 管理物理结构 管理基于设计的存储 管理安全性 网络管理 备份与恢复(重点,难点) 数据库调整与优化(重点,实践) 一.概述: 1.关系型数据库的组成 多个表之间存在着管理 关系用来描述多个表之间的数据依赖,包括了一对一.一对多.多对多的关系 所谓的“关系”在oracle数据库中主要表现为主键.外间等约束条件 2.数据库对象 表  table 约束  constraint 试图  view 索引  index  --> 避免全表扫描 同义词 

第一章 Shell基础知识

1.1 简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处理流程示意图: Shell既然是工作在Linux内核之上,那我们也有必要知道下Linux相关知识. Linux是一套免费试用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. 1983年9月27日,Richard Stallman(理查德

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

第一章- 嵌入式开发概述

嵌入式系统的概念 嵌入式系统在术语上被定义为:以应用为中心.以计算机技术为基础.软件硬件可裁剪.适用于应用系统,对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统.它的特点在于两方面:嵌入.专用. 从20世纪70年代起,微型机以小型.价廉.高速数值计算等特点迅速走向市场,它所具备的智能化水平在工业控制领域发挥了作用,常被组装成各种形状,"嵌入"到一个对象体系中,进行某类智能化的控制.这样一来,计算机便失去了原来的形态与"通用"的功能,为区别于通用计算机系统,将

[第一章]Shell 基础

什么是 Shell 大纲             [前言]         1.Shell简介         2.Bash功能介绍              2.1.记录命令历史              2.2.命令和文件名补全              2.3.别名              2.4.管道符/重定向              2.5.快捷键          3.Bash使用技巧              3.1.重定向技巧              3.2.命令序列号使用

java第一章 JAVA语言概述知识点

1.jdk1.5后添加了很多新特性 2.为什么要添加环境变量: 1. PATH环境变量.作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了. 2. CLASSPATH环境变量.作用是指定类搜索路径,要使用已经编