zoukankan      html  css  js  c++  java
  • ch10学习笔记

    1. 程序设计语言
    2. shell脚本
    3. 知识点归纳
    4. 最有收获的内容
    5. 问题与解决思路
    6. 实践内容

    程序设计语言

    程序设计语言的种类千差万别。但是,一般说来,基本成分不外4种。

    数据成分。用以描述程序中所涉及的数据。
    运算成分。用以描述程序中所包含的运算。
    控制成分。用以表达程序中的控制构造。
    传输成分。用以表达程序中数据的传输。

    具体来说:

    1. 数据类型(描述了数据在内存存储区中占据的空间大小)
    2. 常量
    3. 变量
    4. 运算符(+ - * / ** ^ | & ! ++ ?: 增强运算符等)
    5. 表达式(一般有赋值、算术、逻辑、条件、强制类型转换等类型)
    6. 标识符(常量名、变量名、函数名、类名等。)
    7. 关键字(具有特定含义的标识符,不能用来作变更名、函数名等)
    8. 基本控制结构(顺序结构、选择结构、循环结构)
    9. 函数
    10. 面向对象程序语言需实现封装、继承和多态

    shell脚本

    在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。

    Shell Script ,即Shell脚本,就是把原本需要在命令行输入的命令组成预先放入到一个文件中,方便一次性执行。很多脚本语言实际上已经超过简单的用户命令序列的指令,还可以编写更复杂的程序。

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(shell脚本语言)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

    脚本语言 -> 解释器 -> 解释执行

    编译语言 -> 编译器 -> 编译链接

    知识点归纳

    数组操作

    数组定义

    使用()直接定义数组
    days1=(one two three four five)

    或者在()中声明下标,默认从0开始
    days2=([0]=’one’ [1]=’two’ [2]=’three’ [3]=’four’)

    下标可以不连续
    days3=([0]=’one’ [2]=’three’)

    获得数组中所有值:${数组名[@]}、${数组名[]}
    ${数组名[@]}得到以空格隔开的元素,可以用在数组遍历中;
    ${数组名[
    ]}得到的是一整个字符串

    注意:${数组名}并不会获得所有值,它只会获得到第一个元素的值。即${数组名}=${数组名[0]}

    数组长度:
    利用”@”或“*”字符,将数组扩展成列表,然后使用”#”来获取数组元素的个数。

    #!/bin/bash
    
    days=(one two three four)
    echo "数组days的元素个数为:${#days[@]}"
    
    echo "**********"
    names=()
    names[1]=tom
    names[2]=jack
    echo "数组names的元素个数为:${#names[*]}"
    

    遍历
    (1)${数组名[@]}、${数组名[*]}均可以获得所有元素(不管是元素列表,还是一整个字符串),使用for循环遍历即可
    (2)带数组下标的遍历,当需要使用到数组的下标时,可以使用${!数组名[@]}

    #!/bin/bash
    #数组遍历
    
    days=(one two three four)
    #for循环遍历
    for day in ${days[*]}  #或${days[@]}
    do
            echo $day
    done
    echo "***************"
    #fou循环带下标遍历
    for i in ${!days[@]}
    do
            echo ${days[$i]}
    done
    

    删除一个数组或数组中元素用unset命令。
    unset 数组名[索引]      #删除索引下的元素
    unset 数组名         #删除整个数组

    连接:
    用()将多个数组连接在一起,()中各个数组用空格隔开。
    days=(one two three four)
    names=(tom jack)
    days=(${days[@]} ${names[@]})

    最有收获的内容

    awk

    awk过于强大,目前只学会了点皮毛

    awk '{pattern + action}' {filenames} 
    

    尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令

    运算符

    内置变量

    小试:用awk打印文件的行数

    awk 'END{print NR}' ./case分支.sh 
    

    shell字符串操作(长度,读取,替换)

    表达式 含义
    ${#string} $string的长度
    ${string:position} 在$string中, 从位置$position开始提取子串
    ${string:position:length} 在$string中, 从位置$position开始提取长度为$length的子串
    ${string#substring} 从变量$string的开头, 删除最短匹配$substring的子串
    ${string##substring} 从变量$string的开头, 删除最长匹配$substring的子串
    ${string%substring} 从变量$string的结尾, 删除最短匹配$substring的子串
    ${string%%substring} 从变量$string的结尾, 删除最长匹配$substring的子串
    ${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
    ${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
    ${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
    ${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

    问题与解决思路

    下面这段程序的return 语句为什么写两对括号?

      1 myadd(){
      2     echo "该函数计算两个数字的和"
      3     echo "请输入第一个数字"
      4     read a
      5     echo "请输入第二个数字"
      6     read b
      7     return $(($a+$b))
      8 }
      9 myadd
     10 echo "两个数字的和是$?"
    
    

    双小括号 (( )) 是一个运算,作用如下:
    + ((exp))结构,扩展并计算一个算术表达式的值。若是逻辑判断,表达式exp为真则为1,假则为0。
    + 只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中。作不同进制运算时,输出结果全都自动转化成了十进制。
    + 括号内支持多个表达式用逗号分开。比如可以直接使用for((i=0;i<5;i++)),if (($i<5))等

    更多关于括号的内容,点击这里

    实践内容

    转义字符与echo -e

      1 #! /bin/bash
      2 
      3 echo hello world!
    I am 20191206陈发强
      4 echo echo -e:
      5 echo -e hello world!
    I am 20191206陈发强
      6 echo 添加双引号:
      7 echo "hello world!
    I am 20191206陈发强"
      8 echo echo -e 添加双引号:
      9 echo -e "hello world!
    I am 20191206陈发强"
    
    

    Readonly关键字

      1 #! /bin/bash
      2 
      3 readonly a=1234qwer
      4 echo $a
      5 a=1234
      6 echo $a
    

    Unset

      1 #! /bin/bash
      2 
      3 a=1234
      4 echo $a
      5 unset a
      6 echo unset之后的输出:
      7 echo $a
    

    字符串
    无引号:
    变量被替换
    转义符识别
    echo -e对转义字符无效

    双引号:
    双引号里变量被替换
    echo -e 对双引号内的对转义字符有效

      1 #! /bin/bash
      2 
      3 name=Jack
      4 echo 双引号:
      5 echo "hello $name
    Nice to meet you"
      6 
      7 echo 没有引号:
      8 echo hello $name
    Nice to meet you
      9 
     10 echo echo -e 双引号:
     11 echo -e "hello $name
    Nice to meet you"
     12 
     13 echo echo -e 没有引号:
     14 echo -e hello $name
    Nice to meet you
    
    

    单引号:
    单引号字符串中的变量是无效的
    两个单引号字符串相邻会自动拼接
    echo -e对单引号内的对转义字符有效

      1 #! /bin/bash
      2 
      3 a=123qwe
      4 echo echo -e :
      5 echo -e 'hhhh
    	$a'
      6 
      7 echo echo :
      8 echo  'abcd
    ''efghi'
      9 echo  'abcd
    '$a'efghi'
    

    case分支

      1 #! /bin/bash
      2 echo "请输入1到4之间的数字"
      3 read a
      4 case $a in
      5         1) echo "你选择了1"
      6         ;;
      7         2|3)echo "你选择了2或3"
      8         ;;
      9         4)echo "你选择了4"
     10         ;;
     11         *)echo "你没有输入1到4之间的数字"
     12 esac
    
    

    if分支

    注意空格 if [ condition ]; then

      1 #! /bin/bash 
      2 
      3 echo "请输入数字a" 
      4 read a
      5 echo "请输入数字b" 
      6 read b
      7  
      8 if [ $a -eq $b ]; then
      9     echo "a 等于 b" 
     10 elif [ $a -gt $b ]; then
     11         echo "a 大于 b" 
     12 else    
     13         echo "a 小于 b" 
     14 fi
    
    

    expr命令

      1 #! /bin/bash
      2 a=10
      3 b=20
      4 
      5 echo "a = $a"
      6 echo "b = $b"
      7 
      8 val=`expr $a + $b`
      9 echo "a + b = $val"
     10 
     11 val=`expr $a - $b`
     12 echo "a - b = $val"
     13 
     14 val=`expr $a * $b`
     15 echo "a * b = $val"
     16 
     17 val=`expr $a / $b`
     18 echo "a / b = $val"
     19 
     20 val=`expr $b % $a`
     21 echo "b % a = $val" 
    
    

    let命令

      1 #!/bin/bash
      2 let a=5+4
      3 let b=9-3
      4 let c=5*4
      5 let d=20/5
      6 let e=20%7
      7 echo $a $b $c $d $e 
      8 
      9 let a++
     10 echo $a
     11 
     12 let b--
     13 let a+=b
     14 echo $b $a
    

    数组长度:

    利用”@”或“*”字符,将数组扩展成列表,然后使用”#”来获取数组元素的个数。

    #!/bin/bash
    
    days=(one two three four)
    echo "数组days的元素个数为:${#days[@]}"
    
    echo "**********"
    names=()
    names[1]=tom
    names[2]=jack
    echo "数组names的元素个数为:${#names[*]}"
    
    

    数组遍历

    #!/bin/bash
    
    
    days=(one two three four)
    #for循环遍历
    for day in ${days[*]}  #或${days[@]}
    do
            echo $day
    done
    echo "***************"
    #fou循环带下标遍历
    for i in ${!days[@]}
    do
            echo ${days[$i]}
    done
    

    数组拼接

      1 #! /bin/bash
      2 
      3 days=(one two three four)
      4 names=(tom jack)
      5 days=(${days[@]} ${names[@]})
      6 
      7 for i in ${days[@]}
      8 do
      9     echo $i
     10 done
    
    

    函数调用与返回值

      1 #! /bin/bash
      2 
      3 myadd(){
      4         echo "该函数计算两个数字的和"
      5         echo "请输入第一个数字"
      6         read a
      7         echo "请输入第二个数字"
      8         read b
      9         return $(($a+$b))
     10 }
     11 myadd
     12 echo "两个数字的和是$?"
     13 
    
    

    函数参数

      1 #! /bin/bash
      2 
      3 funParam(){
      4         echo "第一个参数为 $1"
      5         echo "第二个参数为 $2"
      6         echo "第十个参数为 ${10}"
      7         echo "第十一个参数为 ${11}"
      8         echo "一共有 $# 个参数"
      9         echo "作为一个字符串输出所有参数 $*"
     10 }
     11 funParam 1 2 3 4 5 6 7 8 9 34 73
    
    

    字符串长度和索引

      1 #! /bin/bash
      2 
      3 str=0123456789abcd
      4 echo "字符串str=$str"
      5 
      6 echo 字符串的长度是:
      7 echo ${#str}
      8 
      9 echo 'echo ${str:1:4}'
     10 echo ${str:1:4}
    
    

    文件测试运算符

      1 #!/bin/bash
      2 
      3 file="expr.sh"
      4 if [ -r $file ]
      5 then
      6    echo "文件可读"
      7 else
      8    echo "文件不可读"
      9 fi
     10 if [ -w $file ]
     11 then
     12    echo "文件可写"
     13 else
     14    echo "文件不可写"
     15 fi
     16 if [ -x $file ]
     17 then
     18    echo "文件可执行"
     19 else
     20    echo "文件不可执行"
     21 fi
     22 if [ -f $file ]
     23 then
     24    echo "文件为普通文件"
     25 else
     26    echo "文件为特殊文件"
     27 fi
     28 if [ -d $file ]
     29 then
     30    echo "文件是个目录"
     31 else
     32    echo "文件不是个目录"
     33 fi
     34 if [ -s $file ]
     35 then
     36    echo "文件不为空"
     37 else
     38    echo "文件为空"
     39 fi
     40 if [ -e $file ]
     41 then
     42    echo "文件存在"
     43 else
     44    echo "文件不存在"
     45 fi
    
    

  • 相关阅读:
    Zepto结合Swiper的选项卡
    Angular选项卡
    创建简单的node服务器
    封装ajax
    JQuery和html+css实现鼠标点击放烟花
    js实现螺旋纹理特效
    Angular入门
    Angular JS例子 ng-repeat遍历输出
    Angular 基础教程(1)
    PHP数组
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/15334472.html
Copyright © 2011-2022 走看看