shell程序设计(转)

1.shell脚本的基本概念:  

(1)Shell执行的是称为shell程序,这些程序通常被称为脚本。   

(2)Shell是一个用户和系统间接口的程序,它允许用户向操作系统输入需要执行的命令。   

(3)shell包含bash和csh以及其他程序围绕在linux内核的四周。(图1-1)   

(4)在linux大多数发行版中,默认的shell程序/bin/sh实际上是对程序/bin/bash的一个链接。         

图 1-1      

2.管道和重定向   

2.1重定向输入和输出   

Eg:ls -1 > 1.txt   

说明:   

使用<和>对输入和输出进行重定向。文件描述符0代表一个程序的标准输入,1代表标准输出,2代表错误输出。   

你可以使用>>操作符将输出的内容附加到原有内容之后。  

Eg: ps >> 1.txt   

下面的命令将把标准输出和标准错误输出分别重定向到不同的文件中。   

Eg:kill -HUP 1234 >killout.txt 2>killerr.txt   

用>&操作符来结合两个输出。   

Eg:Kill -l 1234 >killouterr.txt 2>&1      

Tip:返回码一般保存在linux通用“回收站”/dev/null来丢弃所有的输出信息。

Eg: Kill -l 1234 >/dev/null 2>&1   

重定向标准输入。   

Eg:More <killout.txt   

More可以接受文件名作为参数。      

2.2管道   

用管道操作符|来链接进程。在linux下通过管道链接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动地协调。

Eg: Ps > psout.txt Sort psout.txt > pssort.out

可以由一个命令解决: Ps | sort > pssort.out

3.作为程序设计语言

在命令行上直接输入shell脚本是一种测试短小代码段的简单而快捷的方式。

Eg:

$For file in *

>Do

>If grep -l POSIX $file

>Then

>More $file

>Fi

>done

当shell期待进一步的输入时,正常的$shell提示符将改变为>提示符。你可以一直输入下去,由shell

来判断何时输入完毕并立刻执行脚本程序。 Shell还提供了通配符扩展可以(globbing)。可以用通

配符*来匹配一个字符串,也可以用通配符?来匹配单个字符,而[set]允许匹配方括号中任何一个单

字符,[^set]对方括号中的内容取返,即匹配任何没有出现在给出的字符集中的字符。扩展的花括号

{}(只能用在部分shell中,其中包含shell)允许你将任意的字符串放在一个集合中,已供shell扩展。

Eg:

Ls my_{finger,toe}s

这个命令将列出my_fingers和my_toe,它使用shell来检查当前目录下的每个文件。

3.1创建脚本

Eg:

#!/bin/sh

#first

#This file look through all the files in the current

#directory for the string POSIX,and then pringts the names of

#those files to the standard output

For file in *

Do   

If grep -q POSIX $file   

Then   

Echo $file   

Fi

Done

Exit 0

程序中的注释以#符号开始,一直持续到该行结束。请注意第一行#/bin/sh,它是一种特殊形式的注释,

#!字符告诉系统同一行上紧跟在它后面的那个参数是用来执行本文件的程序。 因为脚本程序本质上被

看作是shell的标准输入,所以它可以包含任何能够通过你的PATH环境变量引用的linux命令。

3.2..把脚本设置为可执行 运行脚本有两种方法。

比较简单一点的方法是调用shell,并把脚本文件名当成一个参数,

eg: /bin/sh first

另一种:

Eg: Chmod +x first ./first

如果直接调用first可能会打印未找到命令。这种情况很可能发生,因为shell环境变量PATH并没有设置

为当前目录下查找要执行的命令。要解决这个问题,一种是输入PATH=$PATH:.或编辑你的.bash_profile

文件,将刚才这条命令添加到文件的末尾。./first的作用是把脚本程序的完整的相对路径告诉shell。

4shell的语法

4.1变量 在shell里,使用变量之前通常并不需要事先为它们作出声明。你只是通过使用 它们来创建它们。

在默认情况下,所有变量都被看做字符串并以字符串来存储,即使它们被赋值为数值时也是如此。Shell

和一些工具程序会在需要时把数值型字符串转化为对应的数值以对它们进行操作。 在shell中,你可以通

过在变量名前加一个$符号来访问它的内容。当你为变量赋值时,你只需要使用变量名,该变量会根据需

要自动创建。

4.1.1使用引号 一般情况下,脚本文件中的参数包含空白字符分隔(列如,一个空格、一个制表符或者一个换行符)。

如果你想在一个参数中包含一个或多个空白字符,你就必须给参数加上引号。 如果你把一个$变量表达式放在双引号中,

程序执行到这一行时就会把变量替换为它的值; 如果你把它放在单引号中,就不会发生替换现象。你还可以通过在$字符

前面加上一个\字符取消它的特殊含义。

Eg:

#!/bin/sh

Myvar=”Hi there”

Echo $myvar

Echo “$myvar”

Echo ‘$myvar’

Echo \$myvar

Echo enter some text Read myvar

Echo ‘$myvar’ now equals $myvar

Exit 0

4.1.2环境变量

当一个shell脚本程序开始执行时,一些变量会根据环境设置中的值进行初始化。这些变量通常用大写字母做名字。

具体创建的变量取决于你的个人配置。参见表4-1。

4.1.3参数变量

如果脚本程序在调用时带有参数,一些额外的变量就会被创建。即使没有传递任何参数,环境变量$#也依

然存在,只不过它的值是0罢了。参见表4-2。

4.2 条件

Test或[命令

在实际工作中,大多数脚本程序都会广泛使用shell的布尔判断命令或[或test。为了增强可读性,当使用[命令时,

我们还使用符号]来结尾。

Eg:

If test -f fred.c

Then

...

Fi

也可以写成:

If [ -f fred.c ]

Then

...

Fi

Tip:必须在[符号和被检查的条件之间留出空格。

Test命令可以使用的条件类型分3类:

(1)字符串比较

(2)算术比较

(3)文件有关的条件测试

4.2.1 控制结构 if语句

Eg:

If condition

Then

Statements

Else

Statements

Fi

elif语句:

Eg:

If condition

Then

Statements

Elif

Statements

Else

Statements

Fi

for语句

For variable in value

Do   

statements

Done

While语句

While condition

do   

Statements

Done

Until语句

Untilcondition

Do   

Statements

Done

case语句

Case variable in   

Pattern [ | pattern] ...) statements;;   

Pattern [ | pattern] ...) statements;;   

...

Esac

命令列表 AND列表

语法: Statements1 && Statements2 && Statements3 && ...

从左开始执行每条命令,如果前一条命令返回的是true,右边的下一条命令才能够执行。AND作为一个整体,只有在

列表中的所有命令都执行成功时,才算它执行成功,否则就算它失败。

OR列表 语法:

Statements1 || Statements2 || Statements3 || ...

从左开始顺序执行每条命令。如果前一条命令返回的是false,它右边的下一条命令才能够被执行。 语句块 某些地方

只允许使用单个语句的地方(比如在AND或OR列表中)使用多条语句,可以把它们括在{}中来构造一个语句块。

Eg:

Get_confirm && {   

Grep -v “$cdcatnum” $tracks_file > $temp_file   

Cat $temp_file > $tracks_file   

Echo  Add_record_tracks

}

函数 定义shell函数:

Function_name ()

{

statements

}

你可以通过return命令让函数返回数字值。

Foo ()

{

echo JAY;

}

...

Result=”$(foo)”

你也可以使用local关键字在shell函数中声明局部变量。

2、文件内容行之间的排序 Shell代码

#!/bin/bash

sort -t= +4

文件

备注:“=”表示按=号进行切割(注意:只能是单个字符),“+4”表示按第五个项进行排序。

更多参数:

-r 表示降序排序

-n 表示按数字大小排序

-k 表示根据那个字段排序,4.1,表示第4列第一个字符开始 ,5表示到第5个字段为结束

-t 后面跟分隔符,缺省是空格

例如:sort -r -n -k4.1,5 功能说明:删除变量或函数。

语法:unset [-fv][变量或函数名称]

补充说明:unset为shell内建指令,可删除变量或函数。

参数:

-f  仅删除函数。

-v  仅删除变量

http://www.cnblogs.com/myhello-world/p/hi_laotou.html

时间: 2024-08-26 01:04:01

shell程序设计(转)的相关文章

linux程序设计——shell程序设计(第二章)

第二章    shell程序设计 本章介绍以下内容: 什么是shell 基本思路 微妙的语法:变量,条件判断和程序控制 命令列表 函数 命令和命令的执行 here文档 调试 grep命令和正则表达式 find命令 shell执行shell程序,这些程序通常称为脚本,它们是在运行时解释执行的.这使得调试工作比较容易进行,因为可以逐行地执行指令,而且节省了重新编译的时间.然而,这也使得shell不适合用来完成时间紧迫型和处理器忙碌型的任务. UNIX架构非常依赖于代码的高度可重用性,如果你编写了一个

几个shell程序设计小知识(shell常识部分)

[转自]http://blog.chinaunix.net/uid-168249-id-2860686.html 引用:一.用户登陆进入系统后的系统环境变量:  $HOME 使用者自己的目录  $PATH 执行命令时所搜寻的目录  $TZ 时区  $MAILCHECK 每隔多少秒检查是否有新的信件  $PS1 在命令列时的提示号  $PS2 当命令尚未打完时,Shell 要求再输入时的提示号  $MANPATH man 指令的搜寻路径 二.特殊变量: $0 这个程序的执行名字  $n 这个程序的

Shell 程序设计简易教程

Shell 程序设计简易教程 我不能说我写过多少功能复杂的 shell 脚本,但一些简单的脚本倒是写了不少.在 Linux 下工作,有时候一些零零碎碎的工作,如果你通过写 shell 脚本来处理,会发现那是相当的方便和快捷.当然这样的脚本也不是经常会用到,偶尔用到的时候又要重新去翻书或者查资料,因为我们毕竟不能记住太多的东西,这似乎有些麻烦,所以索性就写了这份网络教程,以便于今后参考. 本教程的内容大部分摘自清华大学出版社出版的<Linux操作系统实用教程>一书,原书作者为文东戈, 孙昌立,

shell程序设计

1.shell脚本的基本概念: (1)Shell执行的是称为shell程序,这些程序通常被称为脚本. (2)Shell是一个用户和系统间接口的程序,它允许用户向操作系统输入需要执行的命令. (3)shell包含bash和csh以及其他程序围绕在linux内核的四周.(图1-1) (4)在linux大多数发行版中,默认的shell程序/bin/sh实际上是对程序/bin/bash的一个链接. 图 1-1 2.管道和重定向 2.1重定向输入和输出 Eg:ls -1 > 1.txt 说明: 使用<和

Linux程序设计(二)shell程序设计

1. 管道和重定向 文件描述符0:一个程序的标准输入 文件描述符1:标准输出 文件描述符2:标准错误输出 >操作符:把标准输出重定向到一个文件. >>操作符:将输出内容附加到一个文件中. |操作符:连接进程. 2. 作为程序设计语言的shell 2.1 创建脚本 注释以#符号开始. #!字符告诉系统同一行上紧跟在它后面的寻附上参数是用来执行本文件的程序. 2.2 把脚本设置为可执行 chmod +x first 3. shell的语法 3.1 变量 默认情况下,所有变量被看作字符串并以字

linux shell程序设计

1.什么是shell    shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).shell接收用户输入的命令并把它送入内核去执行,起着协调用户与系统之间进行交互的作用 2.shell脚本的一般执行过程      shell脚本就是一个包含若干行shell或者linux命令的文件.对于一次编写,多次使用的大量命令,就可以使用文件单独保存下来,以便日后使用.    通常shell脚本时,第一行一定要指明系统需要哪种shell解释用户的shell程序,默认采用#!bin/

shell程序设计小知识

一.用户登陆进入系统后的系统环境变量:$HOME 使用者自己的目录$PATH 执行命令时所搜寻的目录$TZ 时区$MAILCHECK 每隔多少秒检查是否有新的信件$PS1 在命令列时的提示号$PS2 当命令尚未打完时,Shell 要求再输入时的提示号$MANPATH man 指令的搜寻路径 二.特殊变量: $0 这个程序的执行名字$n 这个程序的第n个参数值,n=1..9$* 这个程序的所有参数$# 这个程序的参数个数$$ 这个程序的PID$! 执行上一个指令的PID$? 执行上一个指令的返回值

Shell 程序设计

1. 设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日.Shell程序fileback存放在/usr/bin目录下 1)首先编写备份文件的脚本fileback.sh #!/bin/bash if [ ! -e "/root/bak" ]; //首先查看/root/bak目录是否存在,如果不存在,则创建目录 then mkdir /root/bak fi cd /ro

Linux - Shell程序设计基本语法

使用双引号的字符 双引号是Shell的重要组成部分 $ echo Hello World Hello World $ echo "Hello World" Hello World 如何显示: Hello "World" 以下命令可以吗?$ echo "Hello "World"" 正确方法:echo "Hello \"World\"" 条件测试 测试命令 test expression