嵌入式之Shell学习

shell是一种脚本语言,和C语言一样都是为了完成某些功能,但是shell语言和C语言也有不同的地方,首先是shell不用编译,源代码直接解释执行,就是编写源代码之后,可以直接执行,不用像C语言那样,必须编译成可执行程序,才能够执行。下面对shell语言进行简单的讲解,目的在于能看懂嵌入式中所涉及的shell程序,能够自己改写,不要求完全自己掌握shell语言。

一、shell语言的编写格式。

  1 #!/bin/sh
  2 #comment 
  3 
  4 echo "hello shell."
  5 

第一行代表的含义:指定shell程序执行的时候被哪个解释器解释执行,也就是这个shell程序将来被当前机器中/bin目录下的sh可执行程序执行。

shell中的#后面的东西,代表注释的意思,而且shell中只用这个单行注释命令“#”。

二、shell程序的执行方法

1、可以像执行可执行程序一样,使用./xxx.sh格式来执行shell程序。

2、使用source xx.sh 来执行程序,source是用来执行脚本程序的命令。

3、使用bash xx.sh来执行程序,bash是解释器,脚本程序解释器,一个可执行的程序,shell程序就相当于这个可执行程序的输入参数。

三、shell中变量的定义、初始化、赋值以及变量的引用

1、变量的定义以及初始化

  1 #!/bin/sh
  2 #comment 
  3 
  4 string="hello varible"   #变量的定义,以及初始化,必须注意等号两边不能有空格,一定不能有
  5 echo $string   #变量的引用,必须使用$符号 
  

注意:(1)shell是一种弱类型的语言,所以不像C语言那样,用严格的变量的类型。

(2)shell中变量的引用有两种方式

string="hell shell"
echo $string
echo ${string}hahaha

从这个例子中,我们很容易能够看到两者的区别。

2、shell中没有引号、单引号以及双引号的区别

  1 #!/bin/sh
  2 #comment 
  3 
  4 echo hello shell 
  5 echo "hello shell"
  6 echo 'hello shell'   
  7 #上面三句的输出是相同的,没有任何的区别
  8 
  9 echo "hello \" shell"
 10 echo 'hello " shell'
 11 echo  hello \" shell
 12 #上面的三句,也是可以输出双引号的
 13 
 14 string="hello shell"
 15 
 16 echo "output is $string" #这句代码会输出string的值
 17 echo 'output is $string' #这句代码不会输出string的值,而是输出$string
 18 echo output is $string   #这句代码会输出string的值
 19 
 20 

从中可以看到,单引号是完全的按照字面意思输出,里面有什么就输出什么。双引号是可以输出变量对应的数值的。

3、shell中调用Linux的命令

(1)直接执行

(2)反引号将命令括起来执行。反引号为“ESC”下的按键。

  1 #!/bin/bash 
  2 #comment 
  3 
  4 com=`pwd`
  5 echo "pathname is $com"
  6 
  7 

这段代码的输出:pathname is /mnt/hgfs/winshare/x210/shell

目的就是为了获取,命令执行后的返回值。

 

四、shell中的分支结构if语句

1、格式

if [ 表达式 ]; then 
    xxxxx
else 
    xxxx
fi 

注意表达式的前后和if关键字之后,都是有一个空格的,这个是必须的,不然是错误的。

2、判断条件的格式

(1)判断一个文件是否存在:-f xxxx

  1 #!/bin/sh
  2 
  3 
  4 
  5 if [ -f lesson1.sh ];then
  6     echo "yes" 
  7 else
  8     echo "no"
  9 fi

(2)判断目录时候存在:-d xxxx

用法和判断文件存在是相同的。

(3)判断字符串是否相等:"xxx"= "yyyy"

  1 #!/bin/sh
  2 
  3 
  4 
  5 if [ "abc" = "abc" ];then
  6     echo equal 
  7 else
  8     echo no
  9 fi

(4)判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)

  1 #!/bin/sh
  2 
  3 
  4 
  5 if [ 8 -gt 0 ];then
  6     echo yes
  7 else
  8     echo no
  9 fi

  1 #!/bin/sh
  2 
  3 
  4 
  5 if [ 8 -lt 0 ];then
  6     echo yes
  7 else
  8     echo no
  9 fi

  1 #!/bin/sh
  2 
  3 
  4 
  5 if [ 8 -eq 0 ];then
  6     echo yes
  7 else
  8     echo no
  9 fi

note:

gt:great than 

lt:less than 

ge:great or equal 

le:less or equal 

(5)判断字符串是否为空:-z

  1 #!/bin/sh
  2 
  3 string=""
  4 if [ -z $string ];then
  5     echo kong 
  6 else
  7     echo not kong 
  8 fi

(6)shell中的逻辑或:-o

(7)逻辑&&、||的含义,if表达式的简写

例如:

  1 #!/bin/sh
  2 
  3 string="hello"
  4 [ -z $string ] || echo kong

  表示:如果 前面一条语句为真的话,那么就不会执行后面的语句,如果前面的语句为假的话,就会执行后面的语句。逻辑与指令也是相同的,如果前面一条语句为假的话,那么后面的语句就不用执行了,如果为真的话,才执行后面的语句。

 

五、shell中的循环语句:for循环和while循环

1、for循环的格式

  1 #!/bin/sh
  2 
  3 
  4 for i in 1 2 3 4 5
  5 do
  6     echo $i
  7 done
  8 
  9 

输出为: 1 2 3 4 5

  9 cmd=`ls`
 10 for i in $cmd
 11 do
 12     echo $i
 13 done
 14 

这里会将ls输出的结果,一条一条的输出,也就是将ls命令显示的结果,打印出来。

2、while循环

  1 #!/bin/sh
  2 
  3 i=10
  4 j=0
  5 while [ $i -gt $j ];do
  6     echo $i
  7     i=$(($i - 1))  #这句代码相当于C语言中的i++,格式必须这样。
  8 done

 

六、shell中其他几点需要注意的地方

1、shell中的case语句,和C语言中的switch case 语句是相同的作用

  1 #!/bin/sh
  2 
  3 var=1
  4 case $var in
  5 1)  echo 1  ;;
  6 2)  echo 2  ;;
  7 3)  echo 3  ;;
  8 
  9 esac

shell中的case是不用带break语句的,默认是执行一个case之后,就推出了,所以需要注意在shell语言中,break只是用来跳出循环语句的。当case语句和while循环一起使用的时候,要特别注意了。

2、shell程序中传参机制

(1)参数个数,以及具体的参数

$#:代表实际传递的参数的个数,不同于C语言中传参机制。

$0:执行这个shell程序的解析程序的名字

$1:代表第一个真正的有效参数

...

(2)这里的参数个数和具体的参数,是可以通过shift指令改变的。没使用一次shift指令,参数个数减1,传递的参数向左移动一个。第二个参数变为第一个参数,以此类推。

3、echo的创建文件和追加输入文件

  1 #!/bin/sh
  2 
  3 echo "hello echo" > hello.txt  # >表示创建文件,并想文件中添加内容hello echo
  4 
  5 echo "hello zhuijia" >> hello.txt # >>表示向已存在的文件中追加内容hello zhuijia 
  6 
  7 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值