基础shell编程-------shell学习(12)

本文仅限于自身的少量学习记录,并不是系统地阐述shell编程。

 

使用双引号可引用除字符$、`、/外的任意字符或字符串。这些特殊字符分别为美元符号,反引号和反斜线,对 shell来说,它们有特殊意义。
单引号和双引号功能类似。如果单引号在双引号里面,或者双引号在单引号里面,则内部的引号就被当做普通字符。

shell将反引号``中的内容作为一个系统命令,并执行其内容。

反斜杠用于屏蔽特殊字符的特殊含义:& * + ^ $ ` " | ?。

在终端,可直接使用test或[]来判断,当结果为真时,echo $?为0,否则为1。
脚本中if判断[ aaa ]两边(即aaa两边)必须有空格。
字符串判断,相等的操作符可以是一个=,也可以是两个等号。

 

 

expr的使用方法为expr argument operation argument,当operation是乘号*时,必须用反斜杠屏蔽其特殊含义。当把expr的值作为结果传给一个变量时,要用反引号``将计算式括起来。当operation是=号时,则是比较两个值是否相等。

value=`expr $value1 + $value2`

expr的模式匹配功能。
#匹配内容,只会把括号里的内容输出 $ expr $value : ‘/(.*/)/.doc’ aaa

expr还可以做求字符串长度,求子串,求某个字符第一次出现的下标。

 

 

 

if 语句结构

if test1 then commands1 elif test2 then commands2 else commands3 fi

if的判断语句不仅可以是比较,可以是一条执行语句,它检测的是该执行语句是否顺利执行。
如果要把不同语句放到一行,那么语句之间要加上分号;。冒号:代表一条空语句,且该语句执行情况永远为真,所以“while :”可以表示死循环。

 

 

case 语句结构

case variable in value1) statements1 ;; value2) statements2 ;; value3|value4) statements3 ;; *) statements_default ;; esac

value可以是正则表达(非标准的正则表达,类似于文件名的匹配规则,如*aa*表示包含aa的所有字符串,注意这里*aa*两边不能有引号,否则*号成为普通字符)。

 

 

 

for 循环

for valuable in list do statement1 statement2 … done

访问某个路径下的所有文件,可以cd到那个目录,再{for files in *},这样,即使该目录下有包含空格的文件,它也不会被分为多个名字输出。

 

 

 

untilwhile 语法一样,只不过和while处理判断之后的情况相反。

while [ condition ] do statement1 statement2 … done

和if的判断一样,[ condition ]可以换成执行语句,语句执行成功则返回真。

 

 

 

函数

functionname() { } function functionname() { } 调用的时候:funcname argument1 argument2 …

参数通过$1…$9来访问,只读的。对于10以上的参数,用${10}的形式来读取。
函数可访问修改全局变量。
返回值用return x,x必须为数字,不能为字符串。调用者可用$?来访问。
构建函数库,将一些函数写到脚本中(比如lib.sh),如果下次要用到他们,可以直接在脚本中加入source lib.sh,这样便可以利用该脚本中的函数了。

 

shift用于移动参数,每shift一次,$#减1,参数都往左移一位。(当然也可以一次shift多位)

你可能感兴趣的:(编程,shell,function,脚本,终端)