cortex-a8 uboot系列: 第二章 shell
2赞一、 Shell介绍
Shell是操作系统的终端命令行
1、 Shell是软件系统提供给用户操作的命令行界面,是人机交互的一种方式
2、 可以使用shell和操作系统、uboot等软件进行交互
3、 当需要输入很多命令的时候,就需要shell了
Shell是一类编程语言
常见shell语言:sh, bash, csh, ksh, perl, python
1. 在linux下常用的脚本语言:bash,sh
2. Perl,python这样的高级shell脚本语言,常用在网络管理配置,系统运营等领域
3. 脚本语言在嵌入式中主要是用来做配置。一个复杂的嵌入式程序都是可以配置的,配置过程使用脚本语言实现。
4. Linux中常用的就是bash
Shell脚本的运行机制:解释运行
1. C语言:编写源代码,编译链接成可执行二进制程序,然后运行
2. 脚本程序:脚本程序写好后,即可直接运行
Shell程序是解释执行的,解释执行就是当执行一个shell程序,shell解释器会逐行的解释shell程序代码,然后一行一行执行。
CPU实际只认识二进制代码,不认识源代码。脚本程序源代码其实也不是二进制代码,CPU也不认识,也不能直接执行。只不过脚本程序的编译链接过程不是以脚本程序源代码为单位进行的,而是在脚本运行过程中逐行的解释执行时才去完成脚本程序源代码转成二进制的过程(不一定是编译链接,因为这行脚本程序可能早就编译链接好了,这里只是调用而已)。
二、 编辑器、编译器、运行方法
1. Shell程序是文本格式,只要是文本编辑器都可以。因为shell是要在linux下运行,换行符必须为’\n’,而windows下的换行符是”\r\n”,因此windows中的编辑器写的shell不能再linux下运行
2. 编译器 不需要,因为shell是解释性语言,直接编辑完就可以运行
3. Shell程序运行,有多种方法。介绍三种方法:
第一种:./xx.sh 运行shell,要求shell程序具有可执行权限
第二种:source xx.sh, source是linux的一个命令,这个命令就是用来执行脚本程序,不需要脚本程序需要可执行权限。
第三种:bash xx.sh bash是一个脚本程序解释器,本质上是一个可执行程序。这样相当于执行了bash程序,然后把xx.sh作为参数传给bash运行。
Ubuntu中默认使用的解释器sh是dash,而不是bash
脚本中的注释使用#,#开头的行是注释行,如果有多行需要注释,每行前面都要加#。(#相当于C中的//)
三、 Shell的变量定义和引用
1. 变量定义和初始化:shell是弱类型语言,和C语言不同。在shell中定义变量不需要指定类型。
2. 变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的
3. 变量赋值:变量定义后可以再次赋值,新的赋值会覆盖旧的赋值
4. 变量引用:变量引用在前面加$符号,如变量var,使用$var或者${var}进行引用。
四、 Shell中调用linux命令
1) 直接执行
2) 反引号括起来执行。有时候在shell中调用linux命令是为了得到这个命令的返回值(结果值),就需要反引号(~的同一个键)来调用,得到返回值
五、 if的典型应用
l 判断文件是否存在。(-f),注意[]里面前后都有空格,不能省略。
l 判断目录是否存在 (-d)
l 判断字符串是否相等("str1" = "str2"),注意用一个等号而不是两个
l 判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
l 判断字符串是否为空(-z),注意-z判断时如果变量本身没定义也是不成立(也就是说-z认为没定义不等于为空)
l if判断式中使用“-o”表示逻辑或
l if判断式中使用“-a”表示逻辑与
l 逻辑与&&和逻辑或||与简写的if表达式相结合,没有if,只有[]
六、 调用shell程序的传参
Shell程序可以在调用时传参。Shell程序内部使用一些特定符号来表示,包括以下:
$#表示调用该shell时传参的个数。($#计数时只考虑真正的参数个数)
$0、$1、$2·····则依次表示传参的各个参数。
C语言:./a.out aa bb cc argc = 4, argv[0] = ./a.out, argv[1]是第一个有效参数····
shell:source a.sh aa bb cc $# = 3, $0是执行这个shell程序的解析程序的名字,$1是第一个有效参数的值,$2是第2个有效参数的值·····
shift指令像左移运算符,把给shell程序的传参左移了一个出去。这样$#就会少了一个,原来的$2就变为现在的$1。