各位看官,从今天开始,我们进入新的专栏Shell学习,Shell 是操作系统的命令行界面,它允许用户通过输入命令与操作系统交互。常见的 Shell 有 Bash 和 Zsh,它们可以执行用户输入的命令或运行脚本文件。Shell 广泛应用于系统管理、开发环境自动化、数据处理、网络管理和文件操作等场景,因其灵活性和强大的脚本编写能力而备受开发者和系统管理员的青睐。这与我们以后的开发工作也是密切相关的,我们应该认真对待,为以后工作打好基础,做好铺垫!
目录
一、Shell介绍
1.1 编译型语言和解释型语言
对于计算机硬件而言,它们只能识别某些特定的二进制指令(机器码),而无法解读和直接执行我们编写的源代码。因此,在程序真正运行之前必须将源代码转换成二进制指令。而因为不同语言转换的时机不同,但总体上可分为两类,因而将高级编程语言分为了编译型语言和解释型语言。
1.2 二者的区别
两者在以下方面存在一定的区别(但不仅限于以下方面)
区别1、
编译型语言在程序在执行之前需要一个专门的编译过程,通过编译器把程序编译成为可执行文件,再由机器运行这个文件,运行时不需要重新翻译,直接使用编译的结果就行了。运行效率高,开发效率低。
解释型语言是一边执行一边转换的,其不会由源代码生成可执行文件,而是先翻译成中间代码,再由解释器对中间代码进行解释运行,每执行一次都要翻译一次。运行效率低,开发效率高。
编译型语言的大致运行流程:
解释型语言的大致运行流程:
区别2、
编译型语言可以实现一次编译,无限次运行,只要在首次执行时编译生成相应的可执行文件,在以后的每次运行就只需要直接运行这个可执行文件,因此其运行效率高于解释型语言,但因为不同平台的可执行文件不同(同时不同平台支持的函数、类型、变量等都可能不同),因此编译型语言难以实现在不同操作系统间随意切换,可移植性较差。
对于解释型语言,其实现的是一次编写,到处运行,每次执行都得重新转换源代码,因此其在效率上天生就低于编译型语言,但也因为其每次运行都会重新转换源代码,因此只需要解释器根据操作系统的不同将源代码转换成不同的机器码,相同的源代码,就可以实现在不同的平台上运行,因此其更灵活。
1.3 什么是shell
网上有很多shell 的概念介绍,其实都很官方化,如果你对linux 命令很熟悉,那么编写shell 就不是一个难事,shell 本质上是 linux 命令,一条一条命令组合在一起,实现某一个目的,就变成了shell脚本。它从一定程度上减轻了工作量,提高了工作效率。简单来说Shell就是一个用户跟操作系统之间的一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
常见的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)
最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux操作系统默认的Shell环境。
1.4 第一个helloworld
运行脚本文件有两种方式:
- 直接使用bash命令执行;
- 给文件加上执行权限,执行文件 ;
二、常用语法
2.1 变量
2.1.1 本地变量
在Shell编程中,本地变量是指在脚本或函数中声明并使用的变量,这些变量只在其定义的范围内有效。一旦程序执行离开这个范围,这些变量就会失效或被销毁。
在shell里,使用变量之前通常并不需要指定变量的类型。在默认情况下,所有变量都被看作字符串并以字符串来存储,即使它们被赋值为数值时也是如此。shell和一些工具程序会在需要时把数值型字符串转换为对应的数值以对它们进行操作。Linux是 一个区分大小写的系统 ,在shell中,你可以通过在变量名前加一个$符号来访问它的内容。想要获取变量内容,必须在它前面加一个$字符。当你为变量赋值时,你只需要使用变量名,该变量会根据需要被自动创建。一种