15.华清嵌入式--shell脚本

一.shell脚本基础知识

shell脚本(shell命令的有序集合)

编译型语言(c语言,需要编译成可执行文件,但是执行效率高)

解释型语言(shell语言,不需要编译,使用灵活)

shell编程基本步骤

  1. 建立shell文件(.sh结尾  cat progl.sh)
  2. 赋予shell文件执行权限(chmod 740(777) 文件名)
  3. 执行shell文件(./pro.sh  或者改下环境变量)

注:一个文件有三个权限,分别是读(r)、写(w)和执行(x),它们对应的数分别是4、2和1。

文件权限 r-x-wxr--对应的八进制表示形式为r-x =4+1=5

-wx=2+1=3  r--=4 所以上面用8进制表示为0534

root的缺省unmask是022 代表644

umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。

二.shell变量

1.任何赋值都解释为 一串字符。

例:

count=1 //注:变量没有类型,等号不能有空格

echo $count

DATE =`data` //data为一个命令,用命令置换符

echo $DATE

unset DATE //unset命令删除变量赋值

 

2.Bourne shell 的四种变量

用户自定义变量(通常变量用全大写(COUNT=1))

位置变量(命令行参数)

预定义变量

环境变量

 

 

(1)用户变量注意事项:变量全大写,变量前加$,

(2)位置变量

$1 --$9 包含第一到第九个命令行参数(命令行赋值)

${10} //9以上用括号括起来

$# 命令行参数的个数

$@($*)显示所有命令行参数

$? 前一个命令的退出状态(输出结果)

$$ 包含正在执行进程的ID号

 

(3)环境变量

export (env)//查看常见的环境变量

 

常用环境变量

HOME:$HOME  etc/passwd文件中列出的用户主目录

IFS: Internal Field Separator, 默认为空格,tab及换行符

PATH:搜索路径

PS1,PS2; 默认提示符($)及换行提示符(>)

TERM: 终端类型,常用的有vt100,ansi,vt200,xterm等

 

三.shell功能语句

1.shell语句包括三类

说明性语句:(#开始,就是注释),

功能性语句:(shell命令,用户程序或者其他shell程序),

结构性语句:(条件测试语句,多路分支语句,循环语句,循环控制语句)

 

2.

read 从标准输入读入一行,并赋值给后面的变量

read var1 var2 var3

例:

#!/bin/bash

echo “input anumber”

read NUM

echo $NUM

echo -n “input a number” //-n命令行输出参数不换行

 

3.expr 算数运算命令

主要用于简单整数运算(+ - \* / %)//乘法特殊要加转义符

A=`expr 12 + 5 \* 3`

echo $A

 

4.test 测试语句

可测试三种类型对象(字符串 整数 文件属性)

test “$answer” = “yes” //变量answer的值是否为字符串yes

test $num -eq 18 //num是否为18

test -d tmp //tmp是否为一个目录名

 

(1)文件测试

(-f 是否为普通文件 -L是否为链接文件)

f1 -nt f2 文件f1是否比文件f2更新

发 -ot f2 f1比f2是否更旧

 

(2)字符串测试

test $s1 = $s2 测试字符串内容是否一样

s1 != s2 测试字符串内容是否有差异

-z s1 字符串长度是否为0

-n s1 字符串长度是否不为0

 

(3)整数测试

a -eq b //是否相等

a -ne b // 是否不等

a -gt b //a是否大于b

a -ge b //a是否大于等于b

a -lt b //a是否小于b

a -le b// a是否小于等于b

 

pwd

echo $? //上一条指令是否成功,输出0代表成功

 

四.shell分支语句

 

条件测试语句

多路分支语句

循环语句

循环控制语句

后台执行语句

 

1.

if 表达式

then

       命令表

fi

 

//then fi成对出现类似于c语言中的括号,每个if后面都要跟一个then

if test -f $1

then

       echo “$1 is a file”

fi

2.

如果想加else呢?/

if  test -f $1

then

       echo “$1 is a file”

else

       echo “$1 is not a file”

fi

 

3.

//if  else if else 怎么表示

if test $val -eq 0 //if [ $val -eq 0 ]

then

       echo “val=0”

elif test $val -gt 0//elif [ $val -gt 0 ]

then

       echo “val>0”

else

       echo “val<0”

fi

注:括号两侧要加空格

if [ $val -lt 0 ] || [ $val -gt 100 ]

then

       echo “input error”

       exit 0 //退出

fi

 

2.

c语言中的switch case语句,在脚本中类似的语句

多路分支语句case

只能检测字符串变量

右括号结束

一次可以匹配多个模式 | 分开

命令表以单独的双分号行结束,退出case 语句(类似于break)

模式n常写为字符*,表示所有其他模式 (类似于default)

例:

read val

val =`expr $val / 10`

case $val in

       8|9|10)

              echo “A”

              ;;

       6|7)

              echo “B”

              ;;

       *)

              echo “C”

              ;;

esac

 

 

五.shell循环语句

for 的用法

 

for ((val=1; val <= 5; val=$val + 1))//for val in 1 2 3 4 5

do

       echo “val = $val”

done

//do 和done配合用类似于花括号

还可以取文件

for file in `ls`

do

       echo “$file”

done

 

while 的用法

NUM=1

while (($NUM <10)) //while [ $NUM -lt 10 ]

do

       echo”*********”

       NUM=’expr $NUM + 1’

done

 

循环控制语句

break 之后都不执行

continue //本次不执行

 

六.函数

fun()

{

A=$1

B=$2

C=$3

NUM=`expr $A + $B + $C`

echo “hello world”

return $NUM //返回的也是字符

}

fun 3 4 5 //函数调用及传参

//A B C等函数变量作用域是整个文件,如果想将A改为局部变量

local A=$1 //local

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值