关于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等对应于函数调用语句中的实参。