Shell | 青训营笔记

140 阅读5分钟

1.shell简介

1.1 什么是shell 什么是shell呢?shell是用C语言编写的程序,它是用户使用 Linux 的桥梁。Shell既是一种命令语言,又是一种程序设计语言。简单来说Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。也可以这样认为,linux中的shell就是linux内核的一个外层保护工具,并负责完成用户与内核之间的交互

1.2 shell脚本 shell脚本就是一种专门使用shell编写的脚本程序,它虽然没有C++、Java、Python等一系列高级语言功能强大,但是在服务器运维领域以及嵌入式开发领域,shell脚本具有举足轻重的地位。

shell脚本编程如同其他编程语言的一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以运行了,而linux下的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) … … 在诸多linux发行版系统中,最常用的就是Bash,就是Bourne Again Shell,因为其能工提供环境变量以配置用户shell环境,支持历史记录、内置算数功能、支持通配符表达式等高效性能,将linux常用命令进行的简化,被广泛应用于Debian系列的linux发行版中。

1.3 运行shell脚本

运行shell脚本的方法有两种:

作为可执行程序运行 作为解释器参数运行 2.为什么要学习Shell 既然PHP、Python都可以用来写脚本编程,那为什么还要学习陌生、晦涩难懂的Shell,主要有一下几个原因

环境兼容性,Win7专业版和旗舰版默认安装PowerShell,标准版和家庭版中就没有安装的,其他主流的操作系统都预制了Shell解释器,所以使用sh、bash编写,提供给其他人使用是非常方便的,但是PHP、Python 等等需要安装相应的环境 如果你想做一些定时任务比如说检测进程是否存在,自动备份,或者说自动部署环境、服务器之间的数据同步等等sh、bash会是你最好的选择 sh与bash sh: Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh

bash: Bash是Bourne shell的替代品,属GNU Project,二进制文件路径通常是/bin/bash。 3、实用技巧与最佳实践 3.1 编码规范与风格 3.1.1 代码可读性 在编写 Bash 脚本时,应该尽可能提高代码的可读性。可以通过以下方式实现:

使用注释来解释代码的作用和逻辑; 使用空格、缩进等排版符号来使代码更易读; 将代码分解成函数或模块以提高代码的重用性。 3.1.2 统一风格 在多人协作开发时,为了避免出现代码混乱不统一的情况,应该制定一套统一的编码规范和风格,并确保所有开发人员都能够按照这套规范进行编码。可以使用 shellcheck 等工具来检查代码是否符合规范。

3.2 高效率编程技巧 3.2.1 利用现有工具 在编写 Bash 脚本时,可以利用现有的工具或库来提高程序的效率和可靠性。例如,可以使用 curl 命令从网络上获取数据,使用 jq 命令对 JSON 数据进行处理,使用 sed 和 awk 命令对文本进行处理等等。

3.2.2 代码复用与优化 为了提高代码的复用性和效率,可以将常用的功能封装成函数或模块,并将这些函数或模块放在库文件中,在需要的时候进行导入使用。同时,还可以优化程序性能,例如避免不必要的循环、缓存数据等等。

3.3 安全性与稳定性 3.3.1 权限管理 在编写 Bash 脚本时,应该充分考虑脚本的安全性和稳定性。为了保护系统和数据的安全,应该严格控制脚本的执行权限,避免给予过高的权限。同时,还应该对输入参数进行校验和过滤,以避免注入攻击等安全问题。

3.3.2 错误处理与日志记录 为了保证程序的稳定性,应该编写健壮的错误处理代码,并对错误进行适当的处理或记录。可以将错误信息输出到终端或者记录到日志文件中,以便于调试和分析问题。同时,还应该在脚本中添加适当的检查点,以避免程序意外崩溃或死锁。 4、Shell 易错点 这里我总结了一些初学 Shell 编程容易犯的错误,大多都是语法错误:

4.1 [] 内不能嵌套 (),可以嵌套 []

4.2 $[ val + 1 ] 是变量加 1 的常用方法

4.3 [] 在测试或者计算中里面的内容最好都加空格

  1. 4 单引号和双引号差不多,单引号更加严格,双引号可以嵌套单引号

4.5 一定要注意语句的格式,例如缩进