Linux Shell编程笔记

来源:互联网 发布:freebsd mysql 编辑:程序博客网 时间:2024/06/07 14:08

一,前言

摘抄自《Shell脚本学习指南中文PDF版》

Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型的、特定的工作。一旦你找出完成工作的方法,可以把用到的命令串在一起,放在一个独立的程序或script中。脚本编程语言与编译型语言区别在于脚本编程语言通常是解释型的,这类程序的执行,是有解释器读入程序代码,而编译型语言则是编译执行,将源代码转换成目标代码,便可以直接执行,使用脚本语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象,缺点是执行效率通常不如编译型语言。

二,初识Shell编程

Shell的基本概念

2.1 shell命令

一个简单的Shell命令,如“mkdir dir1 dir2 dir3 dir4” 由命令本身、参数和空格构成

复杂的Shell命令是由简单的命令以多种方式组织在一起的,例如,管道把一个命令的输出传递给另外一个命令作为输入、循环或条件结构,如:

cat book_to_read | grep "english" > mybook

该命令通过管道把cat命令的输出送给grep作为输入。grep命令在输入字符串中查找子字符串english,通过重定向把所有包含字符串english的行写入到mybook文件中
下面附上一个简单的Shell脚本,建立hello文件,文件内容如下:

#!/bin/bash#the simple case -hello worldecho Hello World

为了使当前文件有可执行的权限,输入以下命令:

sh hellochmod u+x hello

运行脚本文件,如下图所示:
执行脚本文件

脚本内容解释:#!说明这个文件类型的,Linux 系统根据#!及该字符串后面的信息确定该文件的类型,在#!之后是一个路径名,这个路径名指定了一个解释脚本中命令的程序,“/bin/BASH”就表明该文件是一个BASH程序 ,需要由/bin下的BASH程序来解释运行。#表示注释,echo语句的功能就是把echo后面的字符串输出到标准输出中。

2.2 Shell语法

如果输入没有被注释掉,那么Shell将读取该输入并且把它分割成字(word)和操作符,然后引用规则来定义输入的每个字符的意义。

2.3 Shell扩展

Shell扩展在每个命令行被分割成记号(tokens)后运行。

2.4 重定向

在一个命令运行之前,它的输入和输出可能会重定向为使用一个由Shell解释的特殊符号。

2.5 Shell函数

Shell函数是一种具有特定功能的一系列语句(命令)的集合,像普通命令一样运行。事实上,BASH在运行脚本的时候,若发现一个函数的定义,则它将函数保留,并作为一条命令,在后面遇见该函数名时,便直接运行该函数,所以函数需要先定义,再调用。

2.6 Shell变量

Shell变量是一个存储值的实体,就是一个存储了名字的参数,引用变量用STR,但是更为标准的是${STR}。BASH中的变量可以不被定义直接使用的,所以也就没有类型之说,一个变量既可以被定义为字符串,也可以被再定义为整数。

2.7 Shell脚本

Shell脚本与Windows下的批处理类似,就是一堆命令的集合,方便一次性运行的程序文件。

三,判断和递归

3.1 判断的用法

判断的语法由if、elif、then、fi所构成,示例如下:

#!/bin/bashif [ $1 -eq 1 ]; then        echo "yes 1"elif [ $1 -eq 2 ]; then        echo "yes 2"else        echo "no"fi

这是简单的判断决定输出,运行结果如下:
这里写图片描述

3.2 循环的用法

在Shell脚本中使用的循环有case、for、while和until,这里介绍for和while这两个循环

while语法


while [ 条件 ] ;
do
命令或动作
done

上面的中括号[]中的条件不能和括号连在一起,而必须加上空格。下面附上一个示例:

#!/bin/bashecho "please input n to computer 1+2+....+n"read -r nx=1sum=0while [ $x -le $n ];do        sum=`expr $sum + $x`        x=`expr $x + 1`doneecho "sum=" $sum

在Shell脚本中,所有的变量都是文字形态,因此要作为数值使用,必须要加上expr变量,而且表达式必须加上反引号。在本示例中用read -r 读取输入变量n,-le表示数值的小于或等于。

for语法


for item in listdo    命令或动作done    

示例,判断当前目录下的所有对象是一般文件还是文件夹:

#!/bin/bashfor ff in *;do        if [ -f $ff ];then                echo "$ff is a file"        elif [ -d $ff ];then                echo "$ff is a directory"        else                echo "$ff is not a file , not a directory"        fidone

资料来源《Linux指令与Shell编程编程范例速查手册》

0 0
原创粉丝点击