关于Linux 中的 shell

在linux系统中使用的主流shell是Bash,它是Bourne Again Shell 的缩写,Bash是由Bourne Shell发展而来的,但Bash与sh稍有不同,它还包含了csh和ksh的特色,但大多数脚本都可以不加修改地在Bash上运行。

 1、shell脚本的执行

我们用vim创建好一个shell程序后,是不能直接运行的,我们首先需要修改它的权限,利用chmod a+x filename 即可把文件修改为可执行文件。当然我们也可以以脚本作为shell参数的执行方式来执行, 可利用命令 sh  filename ,另外一种方式就是利用输入重定向的方式执行, sh < filename .

 2、位置参数 

在shell中规定,位置参数最多不能超过9个,即$1~$9. 如果实际给定的命令行参数多于9个,就需要用shift命令移动位置参数。每执行一次shift命令,就把位置参数整体向左移一位,即原来的$1的值被移走,新的$1的值就是原来$2的值....当然shift不能将$0移走。也可以一次左移多位,shift n 就可实现一次左移n位。

 3、shell中的引号

双引号("")由它括起来的字符,除$ 、倒引号和反斜线(\)保留其特殊功能外,其余字符通常作为普通字符对待。还要特别注意的是引号一定是英文双引号,而不能是中文状态下的引号。

由单引号括起来的所有字符和字符串都作为普通字符出现,显示的时候都照原样显示,特殊字符也失去了原有的特殊意义。

倒引号括起来的字符串被shell解释为命令行,shell会执行该命令,并以它的标准输出结果取代整个倒引号部分。

 4、if 语句

if then else case  在使用时一定要与后面的判断条件,命令等留一个空格,否则就会出错。比如:

错误:if[ "$1" -lt 10 ]   

正确:if [ "$1" -lt 10 ]

if语句最后要以fi结束,case语句最后要以esac结束。

 5、测试语句

test -f "$1"  等效于 [ -f "$1" ]

在使用时要注意以下三点:

如果在test语句中使用shell变量,为表示完整,避免造成歧义,最好用双引号将变量括起来。

在任何一个运算符、圆括号、方括号等操作符的前后至少需要留有一个空格。

如果需要在下一行继续测试表达式,应该在按下Enter键之前加上反斜线(\).

 6、case语句

case string1 in

strn)

commands ;;

esac

其中strn也称为正则表达式。

使用时应该注意以下三点:

每个正则表达式后面可有一条或多条命令,其最后一条命令必须以两个分号(;;)结束。

正则表达式中可以使用通配符。

如果一个正则表达式是由多个模式组成,那各个模式之间应该以竖线"|"隔开。这样就可以表示各个模式是“或”的关系。也就是说只要给定的字符串与其中一个模式相匹配,就会执行其后面的命令表。

 7、算术表达式

正确:expr 14 - 3

错误:expr14-3  ;expr 14-3 ;expr 14 -3

在运算符的前后都要留有空格,否则expr不对表达式进行计算,而直接输出他们,表示”乘“的运算符前应该加一个转义符"\*",并非只是一个"*".

 8、自定义函数

函数定义后,在文件中调用此函数时,直接利用函数名,如test ,不必带圆括号,就好像使用一般普通命令一样。shell脚本与函数间的参数传递可利用位置参数和变量直接传递,变量的值可以由shell脚本传递给被调用的函数,而函数中所用的位置参数$1、$2等对应于函数调用语句中的实参。