脚本语言语法规则
来源:互联网 发布:吾生有涯,而知无涯全文 编辑:程序博客网 时间:2024/06/10 00:42
以下内容源于朱友鹏《物联网大讲堂》课程的学习,以及网站资源http://c.biancheng.net/cpp/view/6994.html的学习(强烈推荐),如有侵权,请告知删除。
1、shell程序的第一行一般都是: #!/bin/sh
- 以#!开始,后面加上一个pathname。
- 指定shell程序执行时被哪个解释器解释执行。
- 这里的/bin/sh意思就是这个shell将来被当前机器中/bin目录下的sh可执行程序执行。
- 可以将第一行写为:#!/bin/bash来指定使用bash执行该脚本。
- 在ubuntu中默认使用的解释器sh其实不是bash,而是dash。dash是ubuntu中默认使用的脚本解释器。
- 脚本中的注释使用#,#开头的行是注释行。如果有多行需要注释,每行前面都要加#。(#就相当于是C语言中的//)
2、shell的本质
(1)shell就是把以前命令行中键入执行的命令写成了程序。(批处理)
- 为了避免反复在命令行下手工输入,把手工输入步骤记录在文本中,然后通过执行该脚本,就能复现原来的手工输入的效果。
(2)shell不需要编译,编辑完可以直接运行。
3、shell中的变量定义和引用
- 和C语言不同,shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言)。
- 在shell编程中,没有类型这个概念。
(1)变量定义时可以初始化,使用=进行初始化赋值。
- =两边不能有空格;
- shell对语法非常在意,非常严格。很多地方空格都是必须没有或者必须有,而且不能随意有没有空格。
- 变量名的命名须遵循如下规则:首个字符必须为字母(a-z,A-Z);中间不能有空格,可以使用下划线(_);不能使用标点符号;不能使用bash里的关键字。
(2)变量赋值。
- 新的赋值会覆盖老的赋值。
(3)变量引用。
- shell中引用一个变量必须使用$符号,$符号就是变量解引用符号。即,$符号后面跟一个字符串,这个字符串就会被当作变量去解析。
- 如果这个字符串本身没有定义,执行时把此变量解析为空。即在shell中没有被定义的变量,相当于一个定义并赋值为空的变量。
- 变量引用的时候可以$var,也可以${var}。某些情况下只能用${var}而不能简单的$var。
(4)只读变量、删除变量
(5)变量类型
4、字符串(单引号、双引号、无引号)
(1)shell中使用字符串可以直接使用。
(2)shell中可以使用单引号来表示字符串;
(3)shell中可以使用双引号来表示字符串;
- 字符串内部有空格时也可以;
- $加变量名可以取变量的值;
- 反引号仍表示命令替换;
- \$表示$的字面值,输出$符号;
- \`表示`的字面值(反引号);
- \"表示"的字面值;\\表示\的字面值;
- 除上情况之外,在其它字符前面的\无特殊含义,只表示字面值。
5、shell中调用linux命令
(1)直接执行;
(2)反引号括起来执行。
- 为了得到命令的返回值(结果值),用一对反引号(和~在一个按键上)来调用执行命令。
6、shell中的if结构
(1)典型if语言格式
if [表达式]; then
xxx
yyy
else
ddd
uuufi
(2)if的典型应用
- 判断文件是否存在。(-f ),注意[]里面前后都有空格,不能省略。
- 判断目录是否存在。(-d)
- 判断字符串是否相等("str1" = "str2"),注意用一个等号而不是两个。
- 判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)。
- 判断字符串是否为空(-z),注意-z判断时如果变量本身没定义也是不成立(也就是说-z认为没定义不等于为空)
(3)if判断式中使用“-o”表示逻辑或
- 相当于在if后面的条件式中用逻辑与、逻辑或来连接2个式子,最终的if中是否成立取决于2个式子的逻辑运算结果。
(4)逻辑与&&和逻辑或||与简写的if表达式相结合
(5)test命令用于检查某个条件是否成立,类似于if中的方括号。细节如下
7、shell中的循环结构
(1)for循环
- 能看懂、能改即可。不要求能够完全不参考写出来。
- 嵌入式并不需要完全重新手写shell,系统管理员(服务器运维人员,应用层系统级管理开发的才需要完全掌握shell)。
(2)while循环
- 和C语言的循环在逻辑上无差别
- 注意格式要求,譬如:while后面的[]两边都有空格,[]后面有分号分号(如果do放在一行的话),i++的写法中有两层括号。
8、echo的创建和追加输入文件
(1)使用echo指令新建一个文件,并且将一些内容传入这个文件中。创建文件并输入内容的关键就是>。
(2)使用echo指令配合追加符号>> 向一个已经存在的文件末尾追加输入内容。(3)echo会自动换行;
上面为了输出双引号,使用了\“转义字符。
9、case语句
(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异;
(2)shell中的case语句没有break。
- shell中的case默认就是匹配上哪个执行哪个,不会执行完其中一个后继续执行后面的其他case。
10、shell程序的传参
(1)shell程序本身也可以在调用时传参。
(2)使用一些特定符号来表示:
- $#表示调用该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个有效参数的值……
11、while循环和case语言和传参结合
(1)shell中的break关键字和C语言中意义相同(都是跳出)但是用法不同。
- shell中case语句默认不用break,因此在shell中break只用于循环跳出。
- 当while中内嵌case语句时,case中的break是跳出外层的while循环的,不是用来跳出case语句的。
(2)shell中的$#,$1等内置变量的值是可以被改变,被shift指令改变。
- shift指令有点像左移运算符,把shell程序的传参左移一个,原来的$2变成新的$1,原来的$#少了1个。
12、运算符
#!/bin/sha=10b=20val=`expr $a + $b`echo "a + b : $val"val=`expr $a - $b`echo "a - b : $val"val=`expr $a \* $b`echo "a * b : $val"val=`expr $b / $a`echo "b / a : $val"val=`expr $b % $a`echo "b % a : $val"if [ $a == $b ]then echo "a is equal to b"fiif [ $a != $b ]then echo "a is not equal to b"fi
(2)关系运算符
(3)布尔运算符
(4)字符串运算符
(5)文件测试运算符
13、文件包含
- 脚本语言语法规则
- InstallShield脚本语言编程语法
- L脚本语言语法手册
- Dot脚本语言语法整理
- linux--脚本语言语法
- 语法规则
- Tcl脚本语言简单语法介绍
- shell脚本语言的基础语法
- shell脚本语言基本语法学习
- ASP脚本语言jscript基本结构与语法
- Cocos2d-x 脚本语言Lua基本语法
- L脚本语言语法手册 0.10版
- L脚本语言语法手册 0.12版
- 自制脚本语言(9) 扩充的语法
- L脚本语言语法手册0.14版
- JAVA语法规则
- XPath 语法规则
- Java语法规则(转)
- 巧为tomcat插件配置log4j日志,解决未报错启动不成功
- 算法导论 练习题 12.2-7
- Linux--信号
- 为什么PHP不需要声明变量呢?
- Java 并发编程知识点(一)
- 脚本语言语法规则
- Java复习——接口
- 枚举【C#】
- Server端Scrapy抓博客并用Django变自己博客
- 表的表空间在users和在system下的区别
- 1.Python基础要点(二)
- 404. Sum of Left Leaves(C语言)
- ubuntn16.04LTS 初试 docker
- Dagger 2从浅到深(七)