Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47150
  • 博文数量: 17
  • 博客积分: 720
  • 博客等级: 军士长
  • 技术积分: 157
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-15 11:23
文章分类

全部博文(17)

文章存档

2011年(4)

2010年(13)

我的朋友

分类:

2010-08-23 10:13:35

ucblog好像不支持文档中的图片,可以看附件中的word文档。

Shell编程学习总结

1、文件名替换:shell在执行命令前,会把命令行中的*替换为工作目录下的所有文件名。问号?表示单字符匹配。

2、输出重定向:’>’ ‘>>’ ;输入重定向:’<’ ;管道命令: ‘|’

3、/dev/null是一个特殊系统文件,从它读取立刻得到文件结束符,向它写入的内容会被丢弃,不做任何显示或其他处理。

例如:who | grep $user > /dev/null #结果不会在屏幕显示,而是被吃掉。

4、Shell在给变量名赋值时不进行文件名替换;Shell在执行命令时,先进行变量替换,然后进行文件名替换。

$ x=*    #把一个星号*赋给变量x

$ echo $x #先做变量替换得到echo *,然后做文件名替换把星号*替换为当前目录下所有文件名。

结果:输出当前目录下所有文件

5、${variable}结构

$ mv $filename ${filename}P #文件重命名,原文件名后加一个P字母

6、整数算术运算

a)        格式:$((expression)) expr (运算符和操作数都以参数形式传递expr命令

例子:$((i+1)), $(( i=(i+1)*j )), result=$(( i<100 && j>10 ))

b)        expr 运算符和操作数都以参数形式传递expr命令

例子:

$ expr 1 + 2

3

$ result=$( expr $i + 1 )

$ str=”hello”

$ expr “$str” : “.*” #根据正则表达式匹配第一个操作数中的字符

5

7、单引号告诉Shell忽略所有特殊字符,双引号要求Shell忽略大多数特殊字符,除了这三种:美元符$、反引号`、反斜杠\”

$ x=*

$ echo ‘$x’

$x

$ echo “$x”

*

8、 命令替换:Shell将一个命令的标准输出插到一个命令行的任何位置的功能

两种格式:`command` $(command)

例子:$( ls | wc -l ), $( grep Money $( find . –type f –a –size ) )

9、参数传递:执行Shell程序时,Shell把命令本身存入Shell变量(位置参数)0中,第一个参数存入1中,第二个参数存入2中,以此类推。如果给程序传递9个以上参数,不能用$10$11引用参数,必须用${10}${11}

10、            $#变量存放传入参数的个数。

11、            $*变量可以引用传递给程序的所有参数,通常用于参数不确定或参数可变的程序中。$@变量与$*类似,但不同的是如果用”$@”,其效果是给每个参数加上引号,当参数中有空白符时比较有用。

12、            Shift命令的作用是把位置参数左移:$2中的内容赋给$1$3中的内容赋给$2,以此类推,原来$1中的内容丢失,执行命令后参数个数$#自动减一。Shift之后跟一个计数值可以以此移动几个位置。

例如:

$ cat tshift #测试shift的程序

echo $# $*

shift

echo $# $*

shift

echo $# $*

shift

echo $# $*

shift

$ tshift a b c

3 a b c

2 a b

1 a b

0

$

13、            $?变量:存放命令的退出状态,0表示执行成功,非0表示运行失败。

14、            if命令格式:执行并检查command_t的结果,如果退出状态为0则执行thenelse之间的命令,否则执行elsefi之间的命令。

if command_t

then

        command

command

       else

              command

              command

             

       fi

15、            test命令:在if命令中测试一种或几种条件

格式:test expression [ expression ] test命令计算expression,如果为真其退出状态为0,否则退出状态为非0

例如:

if test “$name” = “Leo Liu” if [ “$name” = “Leo Liu” ]

then

        echo “find it”

fi

说明:test命令对参数要求比较严格,例如容易出现如下错误,当变量symbol的内容是等号时:

$ echo $symbol

=

$ test –z “$symbol”

sh: test: argument expected  # error message

$

原因是等号操作符的优先级比-z操作符高,所以test命令要求后面跟参数。为了解决这个问题可以把命令写成:test X”$symbol” = X 如果symbol为空结果为真,否则结果为假。

16、            a) test字符串操作符

b) test整数操作符

c) 文件操作符

d) 逻辑操作符

逻辑非操作符’!’[ ! –f “$filename” ]

逻辑与操作符’-a’[ -f “$filename” –a –r “$filename” ]

逻辑或操作符’-o’[ “$a” –eq 0 –o “$b” –eq 0 ]

17、            case命令格式:

case value in

pat1)       command

               command

              

               command;;

patn)       command

               command

              

               command;;

esac

valuepat1…patn相比,如果发现匹配项,就执行匹配项之后到双分号之前的所有命令,之后case命令结束。如果没发现匹配项case语句中的命令一条也不执行。

18、            程序调试用-x选项,可以键入sh -x后面跟程序名和参数,这样可以跟踪程序的执行。

19、            for命令,基本格式:

Shell允许在for命令中进行变量替换和文件名替换。

for file in *; do echo $file; done

for file in name[1-4]; do run $file; done

不带列表的for命令格式:

Shell会认出此格式,并自动将命令行键入的参数依次组织成列表,就跟键入以下命令一样:

20、            while命令,格式如下。执行command1并检测其退出状态,如果为0执行dodone之间的内容,然后再执行并检测command1,知道其退出状态不为0,此时循环执行完毕,继续执行done之后的命令。

例如:

 

21、            until命令,格式如下。until命令跟while命令很像,区别在于只要在until之后的命令退出状态不为0,循环就一直执行下去,一旦退出状态为0,循环就结束。

22、            shell支持breakcontinue命令中断循环,区别是break 终端循环的执行,continue只是跳过循环体中后面的命令,然后循环像正常情况一样正常执行。

23、            处理命令行参数,可以用shell内部命令getopts,格式如下。

getopts命令的设计目标是在循环中运行,每次执行循环,getopts就检查下一命令行参数,并判断它是否合法。判断的方法是检查参数是否以减号开口,后面跟一个包含在options中的字母。如果是,getopts就把匹配的选项字母存在指定变量variable中,并返回退出状态0

如果减号后面的字母没有包含在options中,getops就在variable中存一个问号,并返回0,同时向标准错误写入一条错误信息。

如果命令行中已经没有参数,或是下一个参数不以减号开头,getopts就返回不为0的退出状态。

假定希望命令foo的选项-a-i-r能够被getopts识别,调用getopts的命令方式可能像下面这样:

getopts支持带后面参数的选项,选项的参数会被存入特殊变量OPTARG中。还有一个特殊变量OPTIND,初始值为1,每次执行getopts命令后它都要更新,反映后面要处理的命令行参数个数。

例子:

24、            read命令,格式如下:

当执行这一命令时,shell从标准输入读入一行数据,并把第一个词赋给variables中的第一个变量,第二个次赋给第二个变量,以此类推。如果读入的词数比变量数多,则多出的词一同赋给最后一个变量。

25、            变量$$保存登录当前shell的进程id号码,可用于在编写可以由多人同时运行的shell程序时,生成与进程相关的唯一临时文件。

26、Shell中的特殊变量总结:

文件:Shell编程学习总结.rar
大小:180KB
下载:下载



阅读(901) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-25 15:29:10

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com