NuttX bash的基本语法

      阅读 PX4代码时会涉及到NuttX系统的语言解释器Shell,这里的Shell应该采用的是bash,因此整理一下bash的基本语法。

1. 最简单的例子——Hello World

#!/bin/bash 
# This is a very simple example
echo Hello World
       "#!" 及后面的 "/bin/bash" 就表明该文件是一个 BASH 程序,需要由bash程序来解释执行。 echo 语句的功能是把 echo 后面的字符串输出到标准输出中去,需要注意的是 BASH 中的绝大多数语句结尾处都没有分号。

2. Bash中对变量的规定

      BASH 中的变量都是不能含有保留字,不能含有 "-" 等保留字符,也不能含有空格。

      在 BASH 中变量定义是不需要的,没有 "int i" 这样的定义过程。如果想用一个变量,只要他没有在前面被定义过,就直接可以用,当然你使用该变量的第一条语句应该是对他赋初值了,如果你不赋初值也没关系,只不过该变量是空( 注意:是 NULL,不是 0 )。我们看看下面的例子:

#!/bin/bash 
# give the initialize value to STR
STR="Hello World" 
echo $STR
      在上面这个程序中我们需要注意下面几点:变量赋值时,'='左右两边都不能有空格;BASH 中的语句结尾不需要分号(";");除了在变量赋值和在FOR循环语句头中,BASH 中的变量使用必须在变量前加"$"符号;由于 BASH 程序是在一个新的进程中运行的,所以该程序中的变量定义和赋值不会改变其他进程或原始 Shell 中同名变量的值,也不会影响他们的运行。

      更为标准的变量引用方式是 ${STR} 这样的,$STR 自不过是对 ${STR} 的一种简化。在复杂情况下(即有可能产生歧义的地方)最好用带 {} 的表示方式。
BASH 中的变量既然不需要定义,也就没有类型一说,一个变量即可以被定义为一个字符串,也可以被再定义为整数。如果对该变量进行整数运算,他就被解释为整数;如果对他进行字符串操作,他就被看作为一个字符串。

      关于整数变量计算,有如下几种:" + - * / % ",他们的意思和字面意思相同。整数运算一般通过 let 和 expr 这两个指令来实现,如对变量 x 加 1 可以写作:let "x = $x + 1" 或者 x=`expr $x + 1` 。

在比较操作上,整数变量和字符串变量各不相同,详见下表:


      bash中用于判断文件属性的操作符:


3. Bash中基本流程控制语法

3.1 if语句

if [ expression ]
then
statments
else if [ expression ]
then 
statments
else
statments 
fi

else if可以用eif代替,如果在if一行中使用then,需要采用

if [ expression ]; then

3.2 for循环

for $var in
do
statments
done
for所在那行的变量可以不加 "$" 符号的,而在循环体内是必须加上 "$" 符号的。

3.3 while

while [ condition ]
do
statments
done

3.4 until

until [ condition is TRUE ]
do
statments
done

3.5 case

case "$var" in
condition1 )
statments1;;
condition2 )
statments2;;
...
* )
default statments;;
esac

3.6 break/continue

BASH 中同样有 break 语句和 continue 语句,作用和用法也和 C 语言中相同。

4. 保留字

4.1 保留变量

$IFS  这个变量中保存了用于分割输入参数的分割字符,默认识空格。 
$HOME  这个变量中存储了当前用户的根目录路径。 
$PATH  这个变量中存储了当前 Shell 的默认路径字符串。 
$PS1  表示第一个系统提示符。 
$PS2  表示的二个系统提示符。 
$PWD  表示当前工作路径。 
$EDITOR 表示系统的默认编辑器名称。 
$BASH  表示当前 Shell 的路径字符串。
$0, $1, $2, ... 表示系统传给脚本程序或脚本程序传给函数的第0个、第一个、第二个等参数。
$#   表示脚本程序的命令参数个数或函数的参数个数。
$$   表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。 
$?   表示脚本程序或函数的返回状态值,正常为 0,否则为非零的错误号。
$*   表示所有的脚本参数或函数参数。
$@   和 $* 涵义相似,但是比 $* 更安全。
$!   表示最近一个在后台运行的进程的进程号。

4.2 变量的特殊操作

${var-default} 表示如果变量 $var 还没有设置,则保持 $var 没有设置的状态,并返回后面的默认值 default。
${var=default} 表示如果变量 $var 还没有设置,则取后面的默认值 default。 
${var+otherwise} 表示如果变量 $var 已经设置,则返回 otherwise 的值,否则返回空( null )。
${var?err_msg} 表示如果变量 $var 已经设置,则返回该变量的值,否则将后面的 err_msg 输出到标准错误输出上。

还有下面一些用法,这些用法主要用于从文件路径字符串中提取有用信息:
${var#pattern}, ${var##pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最左侧的串。
${var%pattern}, ${var%%pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最右侧的串。
另外 BASH 2 中还加入下面一些操作:
${var:pos} 表示去掉变量 $var 中前 pos 个字符。
${var:pos:len} 表示变量 $var 中去掉前 pos 个字符后的剩余字符串的前 len 个字符。
${var/pattern/replacement} 表示将变量 $var 中第一个出现的 pattern 模式替换为 replacement 字符串。
${var//pattern/replacement} 表示将变量 $var 中出现的所有 pattern 模式全部都替换为 replacment 字符串。

4.3 特殊符号

# —— 注释,行首以 #(#!是个例外)开头的是注释。
分号(;)——可以在同一行上写两个或两个以上的命令。
双分号(;;)——可以终止case选项。
双引号(")——阻止(解释)STRING中大部分特殊的字符。
单引号(')—— 将会阻止STRING中所有特殊字符的解释,这是一种比使用"更强烈的形式。
斜线(/)—— 文件名路径分隔符,分隔文件名不同的部分(如/home/bozo/projects/Makefile),也可以用来作为除法算术操作符。
反斜线(\)—— 一种对单字符的引用机制。\X 将会“转义”字符X。
冒号(:)—— 等价于“NOP”(no op,一个什么也不干的命令),也可以被认为与shell的内建命令true作用相同;。还可以在 if/then 中作占位符。
美元符号($)—— 作为变量的前导符,用作变量替换,即引用一个变量的内容。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值