Sundy嵌入式底层开发课程笔记 --shell

来源:互联网 发布:男装店淘宝 编辑:程序博客网 时间:2024/05/17 01:11


Shell脚本

课程目标:

熟悉shell脚本的编写规则

看懂复杂的shell脚本

重点难点:

自我查询shell脚本的高端应用

 

#指定sh解释程序

#注释

关于空格, =不加空格,运算符要加空格,如果记不住就改为:=不加空格,其它都加。

 

 

用户自定义变量

变量类型只支持字符串,不支持整形,字符,浮点;

等号前后不要有空格

一般变量命名用全大写

unset命令删除变量赋值

readonly标定只读变量

export为指定global变量

shell的算术运算:

       m=$[m + 1];m=`expt$m+1`;let m= m+1;m=$((m+1))

 

关于算数优先级,如何考虑!

 

 

预定义变量

$0与键入的命令行一样,包含脚本文件名

$1,$2,…,$9分别宝行第一个到第九个命令行参数

$#命令行参数的个数

$@所有命令行参数

$?前一个命令的退出状态

$*所有命令行参数

$$正在执行的进程ID

 

 

环境变量

HOME:当前用户的主目录

PATHshell搜索路径

TERM:终端程序名称

UID当前用户的识别字,取值是由数位构成的字串。

PWD当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化

PS1主提示符,在特权用户下,默认的主提示符是#,在普通用户下,默认的主提示符是$

PS2shell接收用户输入命令的过程中,如果用户在输入行的末尾输入”\”然后回车,或者当用户按回车键shell判断出用户输入的命令没有结束时,就显示这个辅助提示符,提示用户继续输入命令的其余部分,默认的辅助提示符是>

 

 

Shell语句

  1. shell内部命令

    echo

    exec

    exit

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

    read var

    read var1 var2 var3

      注意:当读取数量和变量数量不一致的时候

expr

  常见的算术运算

  +-\*/%

  注意:运算符左右两边都需要有空格,否则会视为字符串连接

test

  测试结果也常常用来作为判断条件及结果

 

 test “$anser” = “yes”

 test $num –eq 18

 test –d temp

 

 可以用[]代替test但需要左右留一个空格,比如

[“$anser” = “yes” ]

if [“$anser” = “yes”]

 

  1. 字符串测试

    s1 = s2

    s1 ! = s2

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

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

     2)数值测试

         -eq等于则为真

         -ne不等于则为真

-gt 大于则为真

         -ge大于等于则为真

-lt 小于则为真

         -le 小于等于则为真

     3)文件测试(加粗为重要)

         -e文件名如果文件存在则为真

         -r文件名如果文件存在且可读则为真

         -w文件名如果文件存在且可写则为真

-x文件名如果文件存在且可执行则为真

         -s文件名如果文件存在且至少有一个字符则为真

         -d文件名如果文件存在且为目录则为真

         -f 文件名如果文件存在且为普通文件则为真

         -c文件名如果文件存在且为字符型特殊文件则为真

         -b文件名如果文件存在且为快特殊文件则为真

 

 

Shell结构性语句

条件:

  1. if…then…fi

    if[exp]

    then [command]

    fi

 

if[exp]

then [command]

else [command]

fi

 

  1. case …esac

    case [var] in

    [param1])

      [command]

    ;;

    [param2])

      [command]

    ;;

    [paramn])

      [command]

    ;;

    esac

    注意:var只能是字符串型变量。

     

     

 

循环:

  1. for…do…done

    for[var] in [list]

    do

      [command]

    done

     

  2. while…do…done

    while[exp]

    do

      [command]

    Done

  3. until…do…done

    until[exp]

    do

      [command]

    done

 

break,continue

 

shell函数

  1. 定义格式

  1. function_name()

    {

       conmmand1

      

    conmmandn

    }

    2)function function_name()

    {

       conmmand1

      

    conmmandn

    }

  1. 调用函数

    [var]=`function_name[arg1,arg2…]`

    Echo $?

     

    区分差别

0 0