美文网首页上嵌嵌入式开发学习
12.9 Linux下shell脚本命令语句学习

12.9 Linux下shell脚本命令语句学习

作者: 清风纳兰 | 来源:发表于2016-12-09 21:04 被阅读66次

    课堂内容

    复习问题:
    printf = "hello,world!"
    printf "%s\n" $string
    printf "%sn" "hello, world!"
    printf "%s\n" hello, world!
    printf "%s\n" "${string}"
    
    三种写法:
    $string
    ${string}
    "$string"
    
    printf打印字符串:
    若变量值中有空格,则打印时使用"$变量名"
    

    字符串赋值时,若值中有空格,用""括起来
    变量名="hello world"
    $引用变量,不能够把" "一起引用,因此打印时,需用"$变量名"

    1.字符串

    (1)字符串的拼接
    引用字符串的值,并将多个字符串的值作为新的字符串付给新的变量,即:str="$string1 $string2"
    
    (2)字符串的长度
    lenth=${#string}
    
    • 此时#不是注释,表示计算字符串的长度
    (3)字符串的分割
    nstr=${string:a:b}
    把字符串string从第a个之后开始截取b个字符,赋给新的变量
    

    2.只读readonly

    num=34
    echo $num
    num=88 #错误(error)
    echo $sum
    只读变量的值无法修改!!!
    

    3.清除变量的值

    num=333
    echo $num
    unset num
    echo $num
    
    • 注意:unset是清除变量的值。若变量未定义直接使用,其值为空

    4.再次强调

    (1)shell程序必须指定脚本的解释程序
    • 在shell脚本程序的第一行必须是:#!/bin/bash
    (2)空格问题
    • 变量赋值时,=两边不可有空格其他情况:尽量加空格

    5.权限问题

    sudo chmod a+x filename 所有用户
    sudo chmod u+x,g+x filename 使用者和所在的组
    sudo chmod +x filename 所有用户
    sudo chmod 777 filename 所有权限
    

    6.从键盘获取变量值

    read:在没有输入时,则一直等待输入、
    read 变量1 变量2 变量3(此情况,将输入的第一个值赋给变量1,第二个值给变量2,剩余的值全部给变量3)
    不建议使用:
    read num1 num2 num3...
    建议:
    read num1
    read num2
    read numn
    

    7.shell的三大语句

    功能型语句、说明型语句、结构分支语句

    (1)说明型语句
    以#开头的语句,至行未均为说明型语句,说明型语句不解释执行(整行)即注释
    说明型语句的位置可以程序中的任何位置,可以放在解释执行语句之后,从#开始的部分到行末(只能注释一行)
    
    (2)功能型语句

    系统命令,自写程序....

    (3)结构型语句

    多露分支语句,循环语句,循环控制语句,测试语句,条件语句,结构型语句

    8.加,减,乘,除,取余(整数)

    expr  let:针对整数做简单的加、减、乘、除、取余(整数)
    expr:
    sum=`expr $sum + $sum1`
    sum1=`expr $sum \* $sum1`
    let:
    let sum=num+num1
    let sum1=num\*num1
    

    乘法*:\是去掉的元意,告诉我们解释器这是真的乘法!!
    :取得结果集
    *
    $( ):取得结果集

    9.条件测试语句

    test 测试语句
    [ 条件测试语句 ]:注意[ ]中的空格!!

    文件测试:
    -e file:测试file时候存在
    -d file:ceshifile是否是目录
    -f file:测试file是否是文件
    -r file:测试file是否可读
    -w file:测试file是否可写
    -x file:测试file是否可执行
    
    算数比较运算符:
    -eq:是否
    -ne:是否不等
    -gt:是否大于
    -ge:是否大于等于
    -lt:是否小于
    -le:是否小于等于
    
    字符串比较:
    -z string:string长度是否为零
    -n string:若string非零,为真
    string=string1:是否相同
    string!=string1:是否不同
    
    逻辑操作符:
    &&:逻辑与
    事件1 && 事件2:当事件1和事件2都为真,则为真
    ||:逻辑或
    当事件1 || 事件2:当事件1或事件2为真,则为真
    -a:and
    -o:or
    
    常见变量:
    $?:命令执行后的返回状态,返回零表示执行成功
    $*:所有参数列表
    $@:所有参数列表
    $#:传递到脚本的参数个数
    $0:可执行命令本身,不是位置参数
    $1~$n:分别表示第一个至第n个位置参数
    echo -n:不换行输出!
    

    10.if语句

    (1)语法机构
    if [ 条件 ]
       then
           命令
    fi
    

    或者

    if [ 条件 ]
       then 
           命令
    elif
        [ 命令 ]
    then
         命令
    else
         命令
    fi
    

    若表达式为真,则执行命令表1中的命令,退出if语句;否则执行命令表2中的语句if

    (3)case语句的用法:

    test命令测试的条件成立时,命令返回值为真,否则返回值为假

    方式一:
    test $name -eq $1
    echo $?
    
    方式二:
    if test -f $filename
    then
       ...
    fi
    
    方式三:
    if [ -f $filename ]
    then
       ...
    fi
    

    10.case...esac

    多路分支语句case用于多重条件测试,语法结构清晰自然,语法结构为:
    case 字符串变量 in #case语句只能检测字符串变量

    语句结构:
    模式1)(各模式中可用文件名元字符,以右括号结束)
          命令表1;;(命令表以单独的双分号行结束,退出case语句)
    模式2)
          命令表2;;
    ...
    模式n)
          命令表n;;
    esac
    
    还可以指定以下字符串集合:
    |  多重选择
    ?  任意一个字符
    * 任意多个字符
    [ a-z ] a至z之间的任意字符
    

    11.for 循环

    for...do...done
    

    当循环次数确定时,使用for循环语句来多次执行一条或一组命令,循环体由语句括号do和done来限定。

    格式为:
    for 变量名 in 值列表
    do
        命令
    done
    

    变量名以此获取单词表中的各个单词,每取一次值,就执行一次。
    循环体中的命令,循环次数由值列表中的单词数确定,命令表中的命令可以是一条,也可以是由分号或者换行符分开的多条。
    若单词表是由命令行上的所有位置的参数时,可以在for语句中省略“in 单词表”部分!

    方法二:
    for(i=0;i<10;++i)
    

    注意:
    for循环值列表可以省略,默认从输入参数中获取

    12.while

    语法结构:
    while 条件或命令表达式
    do
       命令
    done
    

    while语句首先测试其后的命令或者表达式的值,如果为真,就执行一次。
    循环体中的命令,然后在测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。
    while语句的退出状态为命令表中被执行的最后一条。

    13.break和continue

    break n(跳出n层)
    continue语句则马上转到最近一层循环语句的下一轮循环上。
    continue n(跳转到最近n层循环语句的下一轮循环上)。
    

    课后作业

    作业:(待完成...)

    1.使用while循环实现九九乘法表
    2.for或者while实现打印等腰三角形,行数由用户输入
    3.写一个脚本,判断给定目录下的文件属性
    4.预习C语言课本前三四五章,下周进入C部分的学习

    相关文章

      网友评论

      • 一漫116:你们现在在学lunix么😊
        清风纳兰:@小个子姑凉 我也是还没毕业,你是哪边学校的
        一漫116: @清风纳兰 跟你一样,也是在那学,但我现在是在学校里面学习
        清风纳兰:@小个子姑凉 是啊,学嵌入式,你也是这边的学员吗

      本文标题:12.9 Linux下shell脚本命令语句学习

      本文链接:https://www.haomeiwen.com/subject/jaremttx.html