一.shell的介绍: 1.shell是操作系统的终端命令行 2.shell是一类编程语言又叫脚本语言 常用的shell语言:sh、bash、csh、ksh、perl、python等 (1)在linux下常用的脚本语言其实就是bash、sh; (2)perl、python这样的高级shell脚本语言,常用在网络管理配置等领域,系统运维人员一般要学习这些。 (3)脚本语言一般在嵌入式中应用,主要是用来做配置。(一个复杂的嵌入式程序都是可配置的,配置过程就是用脚本语言来实现的)自然不会使用过于复杂的脚本语言特性,因此只需要针对性的学习即可。 (4)linux下最常用的脚本就是bash,我们学习也是以bash为主。 二.shell脚本的运行机制 1.脚本程序的编译链接过程不是以脚本程序源代码为单位进行的,而是在脚本运行过程中逐行的解释执行时才去完成脚本程序源代码转成二进制的过程(不一定是编译链接,因为这行脚本程序可能早就编译连接好了,这里我们只是调用它)的。 2.shell程序是文本格式的,只要是文本编辑器都可以。但是因为我们的shell是要在linux系统下运行的,所以换行符必须是’\n’,而windows下的换行符是"\r\n",因此windows中的编辑器写的shell不能在linux下运行。所以我们整个课程都是在linux下使用vi编辑器(实际上是vim)进行编写调试的。 3.shell语言不需要编译器,因为其为解释性语言所以在编辑器编辑好后既可以运行 4.shell程序运行的运行有多种方法:常用的有三种 (1)./xx.sh,和运行二进制可执行程序方法一样。这样运行shell要求shell程序必须具有可执行权限。chmod a+x xx.sh来添加可执行权限 (2).source xx.sh,source是linux的一个命令,这个命令就是用来执行脚本程序的。这样运行不需要脚本具有可执行权限。 (3).bash xx.sh,bash是一个脚本程序解释器,本质上是一个可执行程序。这样执行相当于我们执行了bash程序,然后把xx.sh作为argv[1]传给他运行。 5. (1)shell程序的第一行一般都是: #!/bin/sh 这行话以#!开始,后面加上一个pathname,这行话的意思就是指定shell程序执行时被哪个解释器解释执行。所以我们这里写上/bin/sh意思就是这个shell将来被当前机器中/bin目录下的sh可执行程序执行。 可以将第一行写为:#!/bin/bash来指定使用bash执行该脚本。 注意:在ubuntu上面默认使用的解释器sh其实不是bash,而是dash。dash是ubuntu中默认使用的脚本解释器。 (2)脚本中的注释使用#,#开头的行是注释行。如果有多行需要注释,每行前面都要加#。(#就相当于是C语言中的//) (3)shell程序的正文,由很多行shell语句构成。
shell下if语句的常用方法 格式: if[ 语句 ];then #注意在[]中的前后必须有一个空格,否则执行会报错 xxx yyy zzz else xxx yyy zzz fi #表示语句结束
常用的if语句 判断文件是否存在。(-f),注意[]里面前后都有空格,不能省略。 if[ -f a.txt ];then echo “ok!” else touch a.txt fi 判断目录是否存在 (-d) if[ -d dir1 ];then echo “ok!” else mkdir dir1 fi 判断字符串是否相等(“str1” = “str2”),注意用一个等号而不是两个 if[ “str1” = “str2” ];then echo “equal!” else echo “not equal!” fi 判断字符串是否为空(-z) if[ -z str ];then echo “yes” else echo “no” fi 判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le) if[ 123 -eq 123 ];then echo “equal!” else echo “not equal!” fi 在if语句下判断式中使用“-o”表示逻辑或 if[ -z $ str -o “str1” = “str2” ];then #当str不为空或者"str1" = "str2"才执行then,否则执行else else fi
逻辑与&&和逻辑或||与简写的if表达式相结合 这里使用的是if语句的简略表达式 [ 语句1 ] || 语句2 #如果语句1成立则不会执行语句2,反之则执行语句2 [ 语句1 ] && 语句2 #如果语句1成立则执行语句2,反之则不会执行语句2 注:博客借鉴了朱老师的嵌入式课程的笔记
|