嵌入式开发——常用shell编程知识点
Posted 代二毛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式开发——常用shell编程知识点相关的知识,希望对你有一定的参考价值。
shell介绍
1.shell是操作系统的终端命令行,可以理解为人机交互的一种方式,软件系统提供给用户操作的命令行界面。
2.编写shell的语言叫shell语言,也叫脚本语言,shell语言是一类语言而不是某一种特定的语言,常用的shell语言:sh、bash、csh、ksh、perl、python等。在Linux下常用的脚本语言有sh、bash。
3.shell脚本的运行机制:解释运行。解释运行和编译运行时两个相对的概念,解释运行就是解释一句运行一句;编译运行是要把代码全部编译成可执行程序才能运行。所以shell脚本不用编译,shell解析器会逐行的去解释shell程序代码,而C/C++则要先编译才能执行。
4.脚本程序文件一般以.sh结尾;
怎么执行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]传给他运行。
shell程序的编写规范
#!/bin/sh
# 解释该脚本的功能,
#接下来就是脚本程序
*********
.
.
.
*********
解析:第一行以#!开头,后面加上pathname。这行话的意思指定shell程序执行时被哪个解释器执行。
shell中的变量定义和引用
1.变量定义:shell语言是弱类型语言,定义变量时不需要指定类型,变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的。
2.变量的解引用:假设有一个变量是var,解引用的方式有2种。(1) $var;(2)${var}。
shell中无引用、单引号、双引号和反引号的区别
无引用:就是字符串既不用单引号也不要双引号括起来,这样可以直接进行赋值,但是不能输出转义字符;
单引号:将字符串用单引号括起来,会按照字面意思去解析字符串,就算在单引号里引用变量也是不起作用的;
双引号:可以在双引号括起来的字符串中引用变量,或者输出转义字符。
反引号:反引号就是ESC键下面和"~"一起的那个键的另一个值,用单引号括起来的内容表示这是一条命令,按照linux中的命令去执行得到结果。比如:在shell程序中`pwd`,表示执行pwd命令,得到当前路径,而不是把pwd简单的当做一个字符串处理。
备注:反引号仍表示命令替换
\\$表示$的字面值 : 输出$符号
\\`表示`的字面值 : 输出`符号
\\"表示"的字面值 :输出"符号
\\\\表示\\的字面值 :输出\\符号
shell中的选择分支结构
if [ 表达式 ]; then
程序语句
else
程序语句
fi
# 注意[]里面前后都有空格,不能省略。
判断文件是否存在 :"-f"
判断目录是否存在 :"-d"
判断字符串是否相等:(“str1” = “str2”),注意用一个等号而不是两个
判断数字是否相等:相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)。(eq就是equal,gt就是greater than,lt就是less than,ge就是greater or equal,le就是less or equal)
判断字符串是否为空:"-z"
逻辑或:"-o"
shell中的while结构
while read line
do
xxx
done < /sbin/conf
效果:每次从/sbin/conf中读取一行,保存在line变量中。
补充:读取文件是按行缓冲的,如果最后一行有效数据没有换行符,会导致最后一行读取成功,
但是没法输出,缓存在line变量里,但是运行接下来的解析。
shell中的for结构
for i in `seq 1 5`
do
echo "$i"
done
解析:
seq 1 5
:是取值的范围;i:是暂存本次循环变量值;效果:本循环结构的功能就是i依次取1、2、3、4、5来进行循环;
shell中的case语句
case $option in
1)
xxx
;;
a)
xxx
;;
s)
xxx
;;
r)
xxx
;;
esac
shell程序的传参
以上是关于嵌入式开发——常用shell编程知识点的主要内容,如果未能解决你的问题,请参考以下文章