欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

嵌入式之Shell学习

程序员文章站 2022-04-05 14:51:23
...

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 

 

相关标签: shell脚本语言