`

用Shell写脚本--Shell脚本编程常用功能(菜鸟级)

阅读更多

Shell编程

一,Shell编程的基本知识

1. S hell 是内核的外壳

Shell 是一种具备特殊功能的程序,是用户和 Unix/Linux 内核间的一个接口。这样用户向 Shell 提出请求, Shell 解释器解释请求并将请求传递给操作系统内核。

Shell 的标准有很多,包括 BourneShell(sh) Korn Shell(ksh) CShell(csh) Bourne Again Shell(bash) 等。

使用 echo $SHELL 可以查看当前环境的 Shell 标准。

任何在命令行中可键入执行的命令都可以放在 Shell 程序中执行。本质上, Shell 脚本是命令组合到一个文件里面。

2. Shell 的编程规范

一般将脚本命名为 ScriptName.sh sh Shell ,表示是 Shell 脚本。当然名字不影响功能。

Shell 以类似 #!/bin/sh 的语句开始,以告知系统使用何种程序解释运行该脚本。习惯上第二行作注释,表明脚本的名称,第三行则注释脚本的功能。

对编写的脚本执行命令 chmod u+x ScripName ,以使脚本具有可运行的执行权限。运行方式为: ScriptName 或者 ./ScriptName

可以在脚本运行时打印一些帮助信息:

#The help document

cat<<ScriptInformation

--This is the Author Information--

Thanks for using this Script!

Base Info:

Writen By: IterZebra

E-mail: IterZebra@gmail.com

--End--

ScriptInformation

ScriptInformation 是用户给该文档取的名字,用以标识文档的开始和结束。

3. Shell 中的条件测试

条件测试命令为 test ,命令执行是否成功可以由 $? 标识,是 0 则表示测试成功,否则表示失败。同时,可以使用“ [] ”语句来表达 test 命令。

常用的文件测试命令有:

-d 目录 -r 可读

-f 常规文件 -w 可写

-L 符号连接 -x 可执行

-s 文件长度大于 0 ,非空 -u 文件的 suid 位设置

常用的逻辑操作符有

-a 逻辑与,符号两边都为真,结果为真

-o 逻辑或,符号两边一边为真,结果为真

!逻辑否,条件为假,结果为真;条件为真,结果为假

常用的字符串测试有

= 字符串相等 -z 空串

= 字符串不相等 -n 非空串

常用数值测试有:

-eq 相等 -ne 不相等

-gt 大于 -ge 大于等于

-lt 小于 -le 小于等于

进行数值测试的两边应该是值(即用 $ 符号),结果值类型是 boolean

4. Shell 中的变量定义

如果设置变量,并不想再改变其值,可以将其设置为只读,只要在变量名前加 readonly 即可。

使用 set 命令可以显示所有本地定义的 Shell 变量。

使用 unset+ 变量名可以清除对变量的定义。

Shell 中的变量分为:用户自定义变量、环境变量、位置变量、特定变量。

用户自定义变量:用户自己定义的变量。

环境变量:环境变量用于所有用户,必须使用 export 导出。

位置变量: $0 是脚本名称, $1~$9 是脚本参数。

特定变量:脚本运行时的相关信息。

特定变量包括:

$# 传递到脚本的参数个数。

$* 传递到脚本的参数列表(类似指针,直接输出值则会打印所有参数),可以超过 10 个。

$$ 脚本运行时当前的进程 ID 号,常用作临时变量的后缀,如: haison.$$

$! 后台运行的最后一个进程的 ID 号。

$@ $# 类似,使用时加引号,并将个数返回到引号中。

$- 上一个命令的最后一个参数。

$? 上个命令的退出状态返回值。 0 表示没错误,其他有对应错误发生。

5. Shell 中的控制语句

包括选择和循环控制语句。

5 .1 选择:

if 语句:

if [ 条件 1] then DO1 elif [ 条件 2] then DO2 else DO3 fi

语义为:如果 [ 条件 1] DO1 ,否则如果( elseif [ 条件 2] DO2 否则 DO3

case 语句:

case in

1

DO1

;;

2)

DO2

;;

*)

DO3

;;

esac

语义为:值如果等于值 1 DO1 ,如果等于值 2 DO2 ,一旦匹配到一个,则退出。 *) 为匹配所有值,因而应该放在最后。

5 .2 循环:

for 语句:

for 变量名 in 列表

do

DO

done

语义为:对变量依次赋予列表中的值,并执行 DO ,直到列表遍历完毕。

until 语句:

until 条件

do

DO

done

语义为:执行 DO ,直至条件为真。

while 语句:

while 命令

do

DO

done

语义为:只有当命令(比如 r ead $MyString )的退出状态为 0 (表示没有错误), DO 才会执行;当命令是测试命令的时候,必须测试结果是真才会被执行。

6. Shell 其他知识

Linux 黑洞指的是虚拟设备 /dev/null ,任何对 /dev/null 的写操作都会执行成功,但是数据会消失,没有任何反馈,因此将不显示的信息送往 /dev/null 是比较常见的做法:

ls –l > /dev/null 。该命令将显示的文件详细信息输出到 /dev/null 虚拟文件。这样该详细信息实际上消失了。该虚拟设备还可用以清空文件的内容:

cat /dev/null > FileName 。该命令将文件“串接”后输出到目标设备或文件。这里即把不存在信息的 /dev/null 输出到 FileName ,这样 FileName 文件的信息被清空。

7. Shell 的编程环境

Cygwin Windows 平台下的一种 Linux 模拟环境,是由 cygnus solutions 公司开发的自由软件。其使得 gcc gdb gas 等开发工具可以生成 win32 的目标文件。开发者使用 win32 API 写了 Unix 系统库的模拟层,只要将开发工具的源代码和这个模拟层库 (cygwin DLL) 链接在一起,就可以使用 Unix 主机上的交叉编译器生成 Windows 平台上的运行的工具集。

软件下载: cygwin 的官方网站, www.cygwin.com

推荐下载: http://www.macraigor.com/full_gnu.htm

  软件安装:安装完后要修改 cygwin 目录下的 cygwin.bat 文件 , @echo off 后面加上 set CYGWIN=title ntea ,这是因为 Cygwin 的启动批处理文件需要启动 Unix 文件系统模拟。

8. Shell 的环境定制及调试相关

改变环境变量可以定制环境,例如增加分隔符等(略)。

加入自己的命令和函数

function( )

{

body

}

必须把函数定义放在脚本开始部分,以使 shell 解释器可以及早发现。

使用其函数名 调用函数, 传给 数的 量跟在函数后面。

函数里面定 量以下划 线 _ 始。

函数可以放在同一个文件 ,也可以放在只包含函数的 独文件中 。该函数单独

件也必 #!/bin/sh 开头

例如程序:

#Directory and Prompt change program

#Syntax: chdir directory

if [ ! -d "$1" ]

then

echo "$1 is not a directory"

exit 1

fi

cd $1

PS1=`pwd`$

export PS1

其作用是如果参数指定的目录存在,则跳转到目录,并且该 Shell 会将 PS1 传递到子 Shell 中。

如果将上述保存到脚本,并运行,则发现,由于当前 Shell 的变量没有受到影响,因此新的目录不会在当前 Shell 显示(即 cd 命令不是改变当前 Shell 的)。

当前的 Shell 即命令行,如果 cd 在当前执行,会导致跳转。但是该脚本文件中的 cd 是在子 Shell 中执行的,所以不会在当前 Shell 即命令行中发生提示符的改变。

为达到改变当前 Shell 的目录,可以把改变函数写在个人函数文件,例如以 .persfuncs (任何都可以,比如用 txt )命名,然后在当前 Shell 即命令行直接导入并调用。

例如:

建立个人函数:

# /bin/sh

function chdir()

{

#Directory and Prompt change program

#Syntax: chdir directory

if [ ! -d "$1" ]

then

echo "$1 is not a directory"

exit 1

fi

cd $1

PS1=`pwd`$

export PS1

}

将上述保存为 MyFunctionName.persfuncs

在当前 Shell 即命令行中

这样导入: .[ 空格 ]/ 路径 /MyFunctionName.persfuncs 通过导入告知系统该文件是个人函数文件,调用的命令可以到这里查询。

这样就可以直接调用了,例如 chadir MyPath

则跳转到当前目录下的 MyPath 目录

有条件的命令替换

Bourne Shell 中可以使变量替换在特定条件下执行即有条件的环境变量替换

margin: 0

分享到:
评论

相关推荐

    Linux零基础学习笔记 Shell编程-菜鸟入门(超详细)

    通过深入学习和实践这些内容,你将逐渐掌握Linux系统的基本操作,并具备编写简单Shell脚本的能力。记得,学习过程中要多动手实践,遇到问题不要怕,因为每一个问题都是你进步的阶梯。使用Typora这样的Markdown编辑器...

    菜鸟教程shell教程1

    在Shell编程中,我们主要关注的是Bourne Again Shell(Bash),这是Linux环境中最常用的Shell,也是大多数Linux发行版的默认Shell。Bash在功能和易用性上都有优势,使得它在日常任务中广泛应用。在脚本中,我们可以...

    完美的菜鸟编辑脚本软件.

    【标题】:“完美的菜鸟编辑脚本软件” ...总的来说,这款“完美的菜鸟编辑脚本软件”是初学者理想的脚本编写平台,它集成了众多实用功能,旨在降低编程入门的门槛,让学习和实践变得更加愉快和高效。

    linux shel l菜鸟学习日记

    Linux Shell是Linux操作系统中用于与系统交互的一种命令行界面,它是Linux系统管理的重要工具,尤其对于初学者来说,掌握Shell脚本编程能极大提升工作效率。本文档将带你一步步走进Linux Shell的世界,理解其基本...

    Shell编程基础.zip

    2. **命令行参数**:Shell脚本可以接受命令行参数,这些参数在脚本运行时通过`$1`, `$2`, `$3`等特殊变量访问,`$0`表示脚本本身的名称。 3. **流程控制**:Shell支持条件语句(if-else)和循环语句(for, while)...

    shell脚本教程详细讲解(很好)

    对shell脚本的编写从菜鸟到高手的转变

    python菜鸟3.0-终于清楚python菜鸟入门教程.pdf

    在Scrapy的学习中,首先要了解它的架构和运作流程,然后在不同的操作系统上安装Scrapy,接着使用Scrapy Shell和Scrapy Selectors进行调试和数据选取,最后通过创建项目、定义Item和编写Spider来实际爬取网站信息。...

    linux shell中文版

    Linux Shell是Linux操作系统中用于与系统交互的命令行界面,它是Linux系统管理的重要工具,尤其对于初学者,理解和掌握Shell脚本编程能极大提升工作效率。本资料“Linux Shell中文版”专为中文用户设计,旨在帮助...

    菜鸟学shell

    ### 菜鸟学Shell:理解Linux及其发展历程 #### 一、引言 在深入了解Linux之前,我们需要先从计算机的基本概念出发,进而了解Linux的由来及其独特之处。本篇文章将详细阐述Linux的历史背景、发展过程及核心特点,...

    linux 菜鸟过关教程

    - **变量、条件语句、循环结构**: 基本的shell脚本编程元素。 通过本教程的学习,你将熟悉Linux的基本操作,理解其工作原理,并能够解决日常使用中遇到的问题。继续深入,你将发现Linux是一个无比强大的工具,为你...

    Ubuntu菜鸟使用手册

    第13章是关于编程的内容,介绍了从哪里开始学习编程,以及Shell脚本、Awk、Perl、Python、Make工具、C语言和Web编程的基础知识,还包括了文档准备和软件打包的知识。 第14章涉及了GnuPG的安装和使用,GnuPG是一个...

    linux shell(part2) 编程

    本书主要用于Linux脚本编程,希望对菜鸟们有所帮助。

    linux菜鸟过关,容易上手

    7. **Shell脚本编程**:Bash shell允许用户编写脚本自动化任务,学习shell脚本语言有助于提高工作效率。 8. **进程管理**:Linux提供强大的进程管理功能,如ps查看进程,kill和killall终止进程,nohup和&命令可以使...

    linux shell(part1) 编程

    本书主要是用于Linux脚本编程,希望对菜鸟们有所帮助。

    Unix环境高级编程

    8. **Shell脚本编程**:Unix shell不仅是命令解释器,也是编写自动化任务的强大工具。学习shell脚本编写,可以提高日常工作效率。 9. **错误处理**:Unix编程中,良好的错误处理机制是程序可靠性的保障。理解错误...

    Linux菜鸟专用_PDF

    最后,本书可能还会涵盖一些基础的脚本编写,比如bash shell脚本。通过编写简单的脚本,你可以自动化重复性的任务,提高工作效率。 总之,《Linux菜鸟专用》这本书将引导你走过Linux的初级阶段,帮你建立起对这个...

    linux命令大全 linux菜鸟版

    8. **脚本编程**:`bash`是默认的Shell,通过编写shell脚本可以自动化执行一系列命令。 9. **软件管理**:`apt`(Debian/Ubuntu)或`yum`(RHEL/CentOS)用于安装和更新软件包。 10. **高级特性**:如管道(`|`)...

    RedHatLinux菜鸟入门教程--无私奉献了!

    10. **shell脚本编程**:学习编写bash脚本可以自动化重复性任务,提高工作效率。了解变量、条件语句、循环和函数是基础。 以上只是Red Hat Linux入门的一些基本概念和操作,随着你对系统的深入理解和实践,你会发现...

    shell_100.pdf

    shell脚本100例,基础命令及例题给菜鸟小白的福利。简单的例子和命令实践让你对shell脚本进行更深入的学习,总结100例的shell例题给你更好的学习方式,简单快捷的学会基本shell命令。

Global site tag (gtag.js) - Google Analytics