`

shell脚本入门篇

 
阅读更多

shell脚本 入门 —— 符号篇

 

shell

  1. Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。
  2. 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脚本后:

  1. 交互式进程(父进程)创建一个子进程用于执行脚本,父进程等待子进程终止
  2. 子进程程序替换bash解释器
  3. 读取shell脚本的命令,将其以参数传递的方式传递给bash解释器
  4. 子bash对shell脚本传入的参数进行读取,读一行识别到它是一个命令,则再创建一个子进程,子bash等待该新进程终止
  5. 新进程执行该命令,执行完后将结果交给子进程
  6. 子进程继续读取命令,创建新进程,新进程执行该命令,将结果返回给子进程,直到执行完最后一条命令
  7. 子进程终止,将结果返回给交互式父进程

注意:像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

分享到:
评论

相关推荐

    一篇教会你写90%的shell脚本(入门小结)

    shell脚本? 在说什么是shell脚本之前,先说说什么是shell。 shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell...

    Hadoop大数据学习–Linux,Shell脚本入门–精华篇

    Hadoop大数据学习–Linux脚本入门小结–精华篇 为什么要学脚本 很多网友私信我,看我发过一些脚本,但是不会写,可是作为大数据学习者,我们深刻的意识到,脚本这个东西,已经不是运维人员的专属,我们大数据开发,...

    BASH脚本编程入门

    BASH脚本编程入门 很好的入门书籍 30分钟搞定BASH脚本编程 ...这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程. 在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。

    什么是Shell?Shell脚本基础知识详细介绍

    主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell、有多少种Shell、一个Shell脚本代码实例,需要的朋友可以参考下

    Linux平台下Python脚本编程入门(一)

    众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写。大多数人会认为Bash(或者其他的shell语言)用起来很方便,但一些强大的语言(比如Python)会给你带来一些其它的好处。首先,我们...

    Linux平台下Python脚本编程入门(二)

    shell脚本,这个脚本会显示操作系统类型、主机名、内核版本、版本号和机器硬件架构。在“Linux平台下Python脚本编程入门”系列之前的文章里,我们向你介绍了 Python的简介,它的命令行shell和IDLE(LCTT译注:python...

    30分钟搞定BASH脚本编程

    一个最简单的脚本。 这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程. 在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。 在短时间内快速入门bash编程。

    Linux Shell全精通+Linux内核编程篇+Linux裸机开发篇+Linux驱动开发篇 Linux全栈开发

    课程内容包括了第一期的Linux零基础入门视频教程,主要包括了Linux基础和Shell脚本编程。第二部分上Linux内核编程全解部分,第三部分上Linux的裸机开发实战课程,以及最终的Linux驱动开发篇教程。这几部部分课程可以...

    linux shell指令基础

    linux shell 指令基础,适合初学者,入门教程,基础篇

    Linux运维从入门到高级全套案例v3.rar

    Linux入门篇 操作系统简介 1.2 Linux发展趋势 3 Linux系统安装 4 Linux学习技巧 2. Linux系统篇…… 2.1 Linux系统管理… 2.1.1 Linux目录初识 2.1.2 Linux常用命令 2.1.3 Linux用户权限 2.1.4Limx网络配置 3. Linux...

    Linux运维从入门到高级全套案例v3

    4.1. 4 Shell脚本案例 67 4.1. 5 Shell数组编程 71 5. Linux深入篇 72 5. 1 构建Nginx WEB服务器 72 5.1. 1 Nginx WEB安装 73 5.1. 2 Nginx 虚拟主机配置 74 5.1. 3 Nginx性能优化 75 5.1. 4 Nginx参数深入理解 77 ...

    鸟哥的linux私家菜

    第三部分介绍文字模式接口 shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全非常重要的Linux账号的管理,以及主机系统与程序的管理,如查看进程、任务分配...

    edison-scripts:用于简化 Intel Edison 上某些内容的脚本

    爱迪生脚本用于简化 Intel Edison 上某些内容的脚本入门使用这些脚本的推荐方法是将edison-scripts目录添加到您的 PATH。 为此,请将以下内容添加到~/.profile : export PATH= $PATH : ~ /edison-scripts 然后, ...

    Linux全栈开发精通视频教程-网盘链接提取码下载 .txt

    课程内容包括了第一期的Linux零基础入门视频教程,主要包括了Linux基础和Shell脚本编程。第二部分上Linux内核编程全解部分,第三部分上Linux的裸机开发实战课程,以及最终的Linux驱动开发篇教程。这几部部分课程可以...

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

    over-cs:基于Linux的CS知识:[进度01%]操作系统、计算机网络、计算机组成原理、数据库概论等CS知识,附录基础的编译原理、C语言、汇编等

    说明本笔记仍然是非常早期的版本,只是一些随笔,暂时没有...0 基础了解 Linux《Linux 命令行与 shell 脚本编程大全》:shell 精品《鸟哥的私房菜:服务器架设篇》:偏运维方向《UNIX/Linux 系统管理技术手册》:偏运

Global site tag (gtag.js) - Google Analytics