x210:uboot和系统移植扩展--shell编程

shell编程

(1)可以直接使用linux命令

  • 直接执行
  • 反引号括起来执行,得到这个命令的返回值(结果值)

(2)变量定义和引用

  • shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言),和C语言不同。在shell编程中定义变量不需要制定类型,也没有类型这个概念。
  • 变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的。shell对语法非常在意,很多地方空格都是必须没有或者必须有。
  • shell中并不刻意区分变量的定义和赋值,反正每个变量就是一个符号,这个符号的值就是最后一个给他赋值时的值。
  • shell中引用一个变量必须使用$符号。如果$符号后这个字符串本身没有定义则会把这个变量解析为空。也就是说在shell中没有被定义的变量其实就相当于是一个定义并赋值为空的变量。变量引用的时候可以$var,也可以${var},主要用来标识边界
    #!/bin/sh
    
    a=123
    echo $a123
    echo ${a}123

(3)无引号、单引号和双引号的区别

  • shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是缺陷是不能输出"或者其他转义字符。
  • 单引号中:完全字面替换(不可包含单引号本身)
  • 双引号中:
    $加变量名可以取变量的值
    反引号仍表示命令替换
    \$表示$的字面值            输出$符号
    \`表示`的字面值
    \"表示"的字面值
    \\表示\的字面值
    除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。

(4)选择分支结构

  • 典型if语言格式,注意[]里面前后都有空格,不能省略。
    if [ 表达式 ]; then
        xxx
        yyy
        zzz
    else
        xxx
        ddd
        uuu
    fi
    
    或者
    
    if [ 表达式 ]
    then
        xxx
        yyy
        zzz
    else
        xxx
        ddd
        uuu
    fi
  • 判断文件是否存在。(-f)
    #!/bin/sh
    
    if [ -f a.txt ]
    then
        echo yes
    else
        echo no
        touch a.txt
    fi

     

  • 判断目录是否存在  (-d)
  • 判断字符串是否相等("str1" = "str2"),注意用一个等号而不是两个
  • 判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
  • 判断字符串是否为空(-z)注意-z判断时如果变量本身没定义也是不成立(也就是说-z认为没定义不等于为空)
  • 使用“-o”表示逻辑或
  • 使用“-a”表示逻辑与
  • 逻辑与&&和逻辑或||与简写的if表达式相结合
    #!/bin/sh
    
    string=`pwd`
    
    [ -z $string ]||echo feikong    #如果string变量为空,则不执行后面的
    [ -z $string ]&&echo kong        #如果string变量为空,则执行后面的
  • case语句 。shell中的case语句不需要break,和C语言中的switch case不同。shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break)。
    #!/bin/sh
    
    var=2
    
    case $var in
    1) echo 1;;
    2) echo 2;;
    esac

     

(5)循环结构

  • for循环
    #!/bin/sh
    
    for i in 1 2 3
    do
        echo $i
    done
    
    for i in `ls`
    do
        echo $i
    done

     

  • while循环
    #!/bin/sh
    
    i=1
    
    while [ $i -lt 10 ]
    do
        echo $i
        i=$(($i+1))
    done

     

(6)创建和追加输入文件

  • 可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件中。创建文件并输入内容的关键就是>。
  • 还可以使用echo指令配合追加符号>> 向一个已经存在的文件末尾追加输入内容。

(7)调用shell程序的传参

  • shell程序本身也可以在调用时传参给他。
  • 在shell程序内部使用传参也是使用的一些特定符号来表示的
    $#参数个数(从$1开始算起)
    $0解析程序的名字
    $1第1个参数
    $n第n个参数

(8) while循环和case语句和传参结合

  • shell中的break关键字和C语言中意义相同(都是跳出)但是用法不同。因为shell中case语句默认不用break的,因此在shell中break只用于循环跳出。所以当while中内嵌case语句时,case中的break是跳出外层的while循环的,不是用来跳出case语句的。
  • shell中的$# $1等内置变量的值不是不可变的,而是可以被改变,被shift指令改变。shift指令有点像左移运算符,把我们给shell程序的传参左移了一个移出去了,原来的$2变成了新的$1,原来的$#少了1个。
  • uboot中的一段代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值