shell脚本 入门 —— 符号篇
shell
- Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。
- Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲 命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,包括循环和分支。但Shell脚本是解释执行的,不需 要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一 行敲到Shell提示符下执行。作为程序设计语言,它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
Unix系统中常见的shell有:sh、csh、ksh、tcsh、bash
使用命令: vim /etc/shells 可以查看当前系统支持的bash
shell执行脚本
shell执行脚本是一门解释性语言、批量化处理语言,大大的节省了工作成本
shell脚本第一行必须以 #!开头,它表示该脚本使用后面的解释器解释执行。
举个栗子:
//script.sh 注:这是一个文本文件
1
2
3
4
5
|
#!/bin/bash echo "this is a test"
ls ls -l echo "there are all files"
|
执行方式:
1
2
3
4
5
6
|
//第一种执行方式: [admin@localhost Shell]$ chmod +x script.sh [admin@localhost Shell]$ ./script.sh //第二种执行方式: [admin@localhost Shell]$ /bin/bash script.sh |
执行过程:
Shell会fork一个子进程并调用exec执行./script.sh这个程序,exec系统调用应该把子进程的代码段替换成./script.sh程序的代码段,并从它的_start开始执行。然而script.sh是个文本文件,根 本没有代码段和_start函数,怎么办呢?其实exec还有另外一种机制,如果要执行的是一个文本文件,并且第一行 指定了解释器,则用解释器程序的代码段替换当前进程,并且从解释器 的_start开始执行,而这个文本文件被当作命令行参数传给解释器。因此,执行上述脚本相当于执行程序!
输入命令执行shell脚本后:
- 交互式进程(父进程)创建一个子进程用于执行脚本,父进程等待子进程终止
- 子进程程序替换bash解释器
- 读取shell脚本的命令,将其以参数传递的方式传递给bash解释器
- 子bash对shell脚本传入的参数进行读取,读一行识别到它是一个命令,则再创建一个子进程,子bash等待该新进程终止
- 新进程执行该命令,执行完后将结果交给子进程
- 子进程继续读取命令,创建新进程,新进程执行该命令,将结果返回给子进程,直到执行完最后一条命令
- 子进程终止,将结果返回给交互式父进程
注意:像export、cd、env、set 这些内置命令,在键入命令行后,交互式进程不会创建子进程,而是调用bash内部的函数执行这些命令,改变的是交互式进程。
如果在命令行下,将多个命令用括号括起来,并用分号隔开来执行,交互式进程依然会创建一个子shell执行括号中的命令:
如果不加括号则是另一种情况,cd .. 命令会直接在交互式shell下执行:
. 或者 source这两个命令是Shell的内建命令,这种方式不会创建子Shell,而是直接在交互式Shell下逐行 执行脚本中的命令。
例证:
script.sh
1
2
3
4
5
|
#!/bin/bash ls echo "#################"
cd .. ls |
shell变量
shell变量不需要进行任何声明,直接定义即可,因为shell变量的值实际上都是字符串(对于没有定义的变量默认是一个空串)。定义的时候shell变量由大写字母加下划线组成,并且定义的时候等号两边不能存在空格,否则会被认为是命令!
shell变量的种类:
- 环境变量:shell进程的环境变量可以从当前shell进程传给fork出来的子进程。
- 本地变量:只存在于当前shell进程
利用printenv可以显示当前shell进程的环境变量;利用set命令可以显示当前shell进程中的定义的所有变量(包括环境变量和本地变量)和函数。
一个shell变量定义后仅存在于当前Shell进程,是一个本地变量。用export命令可以把本地变量导出为环境变量。用unset命令可以删除已定义的环境变量或本地变量。
例如:
1
2
3
4
5
6
7
8
9
|
// 分步 先定义后导出
COUNT=5 export COUNT
// 一步完成定义和导出环境变量
export COUNT=5
// 删除已经定义的环境变量
unset COUNT
|
变量引用:
引用shell变量要用到$符号,加{}可以防止歧义。
例如:
1
2
3
|
COUNT=5 echo $COUNT
echo ${COUNT}911
|
通配符 Globbing、命令代换、单引号、双引号
1.常见的通配符:
* : 匹配0个或多个任意字符
? : 匹配一个任意字符
[若干字符] : 匹配方括号中任意一个字符的一次出现
2.命令代换:
反引号`` 或者 $()
script.sh :
shell会先执行反引号或$()中的命令,将结果代换到当前命令行中!
反引号和$()的区别:
反引号本身就对\进行了转义,保留了本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。
反引号中: \\ = \
$()中:\ = \
注意:反引号是老的用法,是新的用法,不管是在学习测试中,还是在实际工作中,()是新的用法,不管是在学习测试中,还是在实际工作中,()的用法都是被推荐的。
算数代换:$(())
例如:将2-1的结果赋给SUB,并显示本地变量SUB
1
2
|
SUB=$((2-1)) echo $SUB
|
3.单引号和双引号
Shell脚本中的单引号和双引号一样都是字符串的界定符,单引号用于保持引号内所有字符的字面值,而双引号有些情况则特殊。如果字符串中有特殊字符需要处理时就用双引号。
注:单引号标注的字符中不能再出现单引号。
举个栗子:
1
2
3
4
5
6
|
#!/bin/bash echo '\\'
echo "\\"
echo '`date`'
echo "`date`"
|
转自:http://www.cnblogs.com/Lynn-Zhang/p/5758287.html
相关推荐
这篇“Shell脚本入门到精通教程”旨在为初学者和网络自动化运维人员提供全面的学习资源,同时也适合那些希望提升网络系统管理技能的学生。 首先,我们需要了解Shell的基础知识。Shell是一种命令解释器,它作为用户...
这篇文档将深入浅出地介绍Shell脚本的基础知识,适合初学者和有一定经验的学习者。 首先,我们需要了解什么是Shell。Shell是操作系统提供给用户与内核交互的接口,它接受用户输入的命令并执行。在Linux或Unix系统中...
本篇“shell脚本大全”资料集成为Linux环境下使用Shell脚本编程的详尽指南。尽管其名称为“shell脚本大全”,但知识点也适用于那些通过Windows商店安装的Linux环境,例如Windows Subsystem for Linux (WSL)。通过WSL...
**Shell脚本编程入门** Shell,全称Bash Shell(Bourne-Again SHell),是一种广泛用于Linux和Unix系统的命令解释器,同时也是编写脚本的编程语言。它允许用户通过命令行接口执行系统操作,如文件管理、程序执行、...
本篇文章将深入探讨Shell编程的基础知识,包括为什么要使用Shell、如何创建和运行Shell脚本、注释的使用、变量的声明与使用,以及基本的Shell命令和流程控制。 1. **为什么要进行Shell编程** Shell编程的主要优点...
这篇“Shell基础”资料为初学者提供了全面的Shell入门指南,帮助你掌握这一强大的工具。 1. **什么是Shell?** Shell是Linux系统中的一个程序,它提供了一个交互式环境,让用户通过文本命令来控制计算机。常见的...
- **编辑工具**:编写Shell脚本通常使用文本编辑器,如NEdit、Kate、Emacs、Vi等。这些编辑器提供了丰富的功能来辅助脚本编写。 ### 2. 脚本基础 - **脚本执行**:脚本文件需要赋予执行权限后才能运行。可以使用`...
掌握Shell脚本编写技巧能够提高工作效率,尤其是在自动化任务执行、文件管理、系统维护等方面。Shell脚本可以将一系列命令组合在一起,形成可重复使用的程序,极大地简化了日常任务。 三、Shell基础语法 1. 变量:...
这篇教程主要针对初学者,旨在引导他们进入Linux Shell脚本的世界。首先,教程介绍的是Shell的基本概念,强调了shell在Unix风格操作系统中的核心作用,即作为用户与系统内核交互的接口。Shell脚本本质上是文本文件,...
Shell脚本是Linux或Unix系统中的一种编程工具,它允许用户通过编写一系列Shell命令来实现自动化任务。在本文中,我们将深入理解Shell脚本的基本概念、语法和常见操作。 首先,Shell是操作系统的一个接口,它提供了...
### Linux Shell(Bash)脚本教程详解 #### 引言 在Linux系统中,Shell脚本是一种非常重要的自动化工具,能够极大地提高系统管理效率。Bash(Bourne-Again SHell)作为最...希望这篇教程能帮助你快速入门Bash脚本编程。
这篇学习教程将带你从入门到实战,深入理解Shell脚本编程的基础知识。 **9.1 接触脚本** Shell脚本是用Shell语言编写的文本文件,这些文件包含了可执行的命令和控制结构。在Linux中,常见的Shell有Bash(Bourne-...
本篇文档将对Linux下的编程工具进行详细介绍,特别是shell脚本编程的相关知识点。 首先,了解Linux环境开发的概述是十分必要的。Linux环境下的开发与Windows环境有很大不同。在Windows环境下,开发者通常会安装一个...
1. 脚本开头:每篇Shell脚本通常以`#!/bin/bash`作为首行,告知系统使用哪个Shell来执行脚本。 2. 变量:在Shell中,变量用于存储数据。例如,`NAME="John"`,然后可以通过`echo $NAME`来输出变量值。 3. 命令行参数...
Shell脚本与Apache Ant是软件开发中的两个重要工具,它们在构建、管理和自动化任务中起着至关重要的作用。这篇文章将带你深入理解这两个工具的基本概念,以及如何在实际工作中高效运用它们。 首先,让我们来了解...
Linux Bash Shell快速入门是针对初学者的指导性文章,它从编写简单的“Hello ...通过这篇文章,初学者可以建立起对Linux Bash Shell编程的基本概念和技能,为进一步学习Linux系统管理和自动化脚本编写打下坚实的基础。
这篇Shell教学笔记PDF版涵盖了从基础到高级的Shell编程技巧,旨在帮助读者深入理解并熟练掌握Shell脚本的编写。 一、Shell基础 1. Shell介绍:Shell是一个命令行接口,它允许用户输入命令并执行系统操作。Bash是最...
这篇教程将带你了解如何开始编写简单的Shell脚本,包括基本语法、变量使用、命令调用以及流程控制。 1. **Shell脚本基础** - **开头行**:每个Shell脚本都应以`#!/bin/bash`或`#!/bin/sh`开头,这被称为Shebang,...