Shell01--基本概述

1. Shell课程大纲介绍

01)Shell基本概述

02)Shell变量定义

03)Shell数值运算

04)Shell流程控制

05)Shell循环语句

06)Shell数组函数

07)Shell内置命令

08)Shell正则表达式

2. 什么是Shell ?

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

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

1.什么是交互式:

交互式模式就是在终端上执行,Shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式,是因为Shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,Shell也终止了。



2.什么又是Shell非交互式:

非交互式模式,以Shell Script(非交互)方式执行。在这种模式下,Shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,Shell也就终止了。



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

  1. #命令行输入
  2. [root@gjy ~]# echo $-
  3. himBH
  4. #交互式Shell (脚本)
  5. [root@gjy ~]# cat 1.sh
  6. \#!/bin/bash
  7. echo $-
  8. [root@gjy ~]# sh 1.sh
  9. hB
  10. #shell 种类
  11. [root@web01 ~]# cat /etc/shells
  12. /bin/sh
  13. /bin/bash
  14. /usr/bin/sh
  15. /usr/bin/bash
  16. [root@web01 ~]# echo $SHELL
  17. /bin/bash

非交互式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脚本开发规范及习惯

  1. 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. 1bash script-namesh #无需执行权限
  2. [root@gjy ~]# cat oldboy.sh
  3. #!/bin/bash
  4. pwd
  5. [root@gjy ~]# ll oldboy.sh
  6. -rw-r--r-- 1 root root 16 2019-06-16 22:38 oldboy.sh
  7. [root@gjy ~]# sh oldboy.sh
  8. root
  9. 2path/script-name或./script-name #必须要有执行权限
  10. [root@gjy ~]# /root/oldboy.sh
  11. -bash: /root/oldboy.sh: Permission denied
  12. [root@gjy ~]# ./oldboy.sh
  13. -bash: ./oldboy.sh: Permission denied
  14. [root@gjy ~]# chmod +x oldboy.sh
  15. [root@gjy ~]# /root/oldboy.sh
  16. root
  17. [root@gjy ~]# ./oldboy.sh
  18. root
  19. 3source script-name或.
  20. #将脚本里的代码调入到当前环境运行,无需执行权限
  21. [root@gjy ~]# cat test.sh
  22. #!bin/bash
  23. ping baidu.com
  24. [root@gjy ~]# sh test.sh >/dev/null
  25. #另打开一个会话窗口查看进程
  26. [root@gjy ~]# ps -ef|grep test.sh
  27. root 13351 13263 0 22:42 pts/2 00:00:00 sh test.sh
  28. root 13387 13355 0 22:43 pts/0 00:00:00 grep --color=auto test.sh
  29. #使用source来执行脚本
  30. [root@gjy ~]# source test.sh >/dev/null
  31. #另一个会话窗口查看进程
  32. [root@gjy ~]# ps -ef|grep test.sh
  33. root 13394 13355 0 22:43 pts/0 00:00:00 grep --color=auto test.sh
  34. [root@gjy ~]# ps -ef|grep ping
  35. root 15616 13965 0 09:47 pts/0 00:00:00 ping baidu.com
  36. root 15620 15591 0 09:47 pts/1 00:00:00 grep --color=auto ping
  37. 4cat script-name |bash
  38. #将脚本里的代码调入到当前环境运行,无需执行权限
  39. 5bash < script-name
  40. #将脚本里的代码调入到当前环境运行,无需执行权限

10. 登录Shell和非登录Shell

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

非登录shell:当然就不需要输入用户名和密码即可打开的Shell,

  1. 例如:直接命令"bash"就是打开一个新的非登录Shell,在GnomeKDE中打开一个"终端"terminal)窗口程序也是一个非登录Shell。执行exit命令,退出一个Shell(登录或非登录Shell);执行logout命令,退出登录Shell(不能退出非登录Shell)。
  2. /etc/profile文件是登录Shell启动后运行的第一个启动脚本,它只为登录Shell运行;非登录Shell不会引发这个脚本。
  3. #登录式shell配置文件执行顺序/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc每个调用的脚本会依次撤销前一个调用脚本中的改变,在退出登录Shell时,我们还可以执行某些任务,如创建自动备份、清除临时文件。把这些任务放在.bash_logout文件中。
  4. #非登录式shell配置文件执行顺序~/.bashrc->/etc/bashrc->/etc/profile.d/*.shPS:验证使用echo在每行添加一个输出即可,注意,要把输出放在文件的第一行

Shell基本概述的更多相关文章

  1. Shell变量概述

    目录 1. Shell变量概述 1.定义变量,变量名=变量值.不能出现"-横杠"命令 2.引用变量,$变量名 3.查看变量,set显示所有变量,包括自定义变量和环境变量 4.取消变 ...

  2. linux笔记:shell基础-概述和脚本执行方式

    什么是shell: linux使用的默认shell是Bash: shell脚本的后缀名为.sh,shell脚本的第一行#!/bin/bash 不是注释,而是标识这是一个shell脚本,因为linux并 ...

  3. 第1章 shell编程概述

    1.shell简介 shell是一种具备特殊功能的程序,它提供了用户与内核交互操作的一种接口.它用于接收用户输入的命令,并把它送入到内核去执行. shell是一种应用程序,当用户登录Linux系统时, ...

  4. Linux学习 -- Shell基础 -- 概述

    Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 ...

  5. shell shell基本概述

    SHELL的概念 SHELL是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序, 用户可以用shell来启动,挂起,停止甚至是编写一些程序. ​ Shell还是 ...

  6. shell 基本概述

    SHELL的概念 SHELL是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序, 用户可以用shell来启动,挂起,停止甚至是编写一些程序. ​ Shell还是 ...

  7. 【shell】概述

    功能简介 批量自动初始化系统(update,软件安装,时区设置,安全策略...) 批量自动部署软件(LAMP,LNMP,Nginx,LVS,Tomcat) 管理应用程序(KVM,集群管理扩容,MySQ ...

  8. Shell脚本 (一) 概述、解析器、脚本入门

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一. Shell 脚本概述 1. Shell 的 含义: Shell 是一个用C语言编写的程序,它是用户 ...

  9. Windows常用shell命令大全

    Windows常用shell命令大全 基于鼠标操作的后果就是OS界面外观发生改变, 就得多花学习成本.更主要的是基于界面引导Path与命令行直达速度是难以比拟的.另外Geek很大一部分是键盘控,而非鼠 ...

随机推荐

  1. poj 1845 Sumdiv (等比求和+逆元)

    题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...

  2. linux内核启动过程

    作者:严哲璟 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 通过qemu以 ...

  3. vue中使用canvas绘制签名

    不多说,上代码: <template>         <div class="sign-canvas">             <canvas   ...

  4. kylin相关问题

    1.Kylin踩坑笔记 - 启动Kylin出现Could not find or load main class org.apache.hadoop.hbase.util.GetJavaPropert ...

  5. 【优化】MySQL千万级大表优化解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  6. 英语单词deprecated

    deprecated 来源——fdisk /dev/sdb [root@centos65 ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is depr ...

  7. Jmeter下载文件和保存文件

    Jmeter下载文件: 任意在网上搜索一张图片,地址为https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&a ...

  8. 网站升级HTTPS教程

    远程桌面连接工具 由于运营商的肆意劫持,越来越多的网站开始使用HTTPS协议,开启HTTPS会优待提升排名,我减少被劫持页面等等   现在越来越多的网站开始使用HTTPS协议,其实百度从2014年底就 ...

  9. c# 如何获取系统管理员权限(UAC) 及判断当前是否是管理员权限

    环境说明: VS2012,windows 7  亲自验证过win7 和xp ,XP直接不弹框,因为XP没有UAC控制机制 步骤1: 右键项目-->属性-->安全性-->选中[启用Cl ...

  10. React学习笔记-生命周期函数

    定义: 生命周期函数指在某一个时刻组件会自动调用执行的函数