zoukankan      html  css  js  c++  java
  • Shell-03

    Shell-03 编程原理

    1. 编程介绍

    最开始的编程 机械码(16进制)—CPU会识别

    计算机只能识别二进制指令 程序 = 指令 + 数据

    驱动:

    硬件默认是不能使用的 驱动程序----不同的厂家硬件设备之间需要进行指令沟通,需要驱动程序来进行“翻译”;更趋近于硬件的开发工程师,要学习“汇编语言”;而“汇编语言”被厂家所限制;

    底层语言:C语言和C++ 汇编语言

    操作系统:分配硬件资源来进行进程管理

    现在的编程是基于高级语言,以及超高级语言,更好的是让程序员能够实现编程功能

    CPU控制硬件

    编程语言的分类:

        高级语言、以及超高级语言需要翻译成计算机可读的语言(二进制指令)

        解释型:shell语言 python  perl(logo是骆驼)

                 逐行翻译,逐行执行---解释一行执行一行

                 Bash –x 逐行执行并显示(默认也是逐行执行)

                 Bash –x filename.sh

    编译型:C语言 C++ C#

             一次编译,全部执行

    Java即是编译型也是解释型

    根据服务重心的不同分为面向过程编程和面向对象编程

    面向过程  侧重于指令

    面向对象  侧重于数据的编程语言 对象是数据

             编程语言的执行方式:

                      【一行一行执行】

    (1)      顺序执行 依次执行,依次翻译

    (2)      循环执行 for(遍历) while(循环条件) unitl(和while相反,false进入循环)

    (3)      选择执行—分支结构 if  case

    函数递归-----算阶乘

    1. shell脚本语言编程

    (1)      逻辑关系

    添加用户test到test10

    for I in $seq(1,10);do

        user=test$i

        pwd=`123456`

        p=cat /etc/passwd | grep “$user” &> /dev/null

        if [$? –eq 0 ];then

                 echo “存在”

        else

                 useradd $user6

                 echo “123456” | passwd –stdin “$user” &> /dev/null

        fi

    done

     

    如上一种判断条件是有问题的,修改如下图所示:

     

    但是,在接收参数时,$i只代表了100,所以用$*代替,如下图所示:

     

    罗塞塔石碑-----------一种美国多媒体语言教学软件

    3.Shell语句介绍

    (1)Shell语句是面向过程的,侧重于指令集;

    优点:调用os(操作系统)的命令行,来实现所有功能,执行效率高

    缺点:没有库调用(区分python,python可以调用各种模块接口)

    (2)Shell语句的基本结构组成:

                 命令----基础

    每天备份一次/etc目录下的所有文件  脚本

    date=`date +%F`

    if [ -f /tmp/${date}etc.bak ];then

    tar czf /tmp/${date}etc.bak /etc/

    fi

                 数据----变量----(全局变量、局部变量、本地变量、传参)

    /etc/profile----环境变量/全局变量

    export

                 逻辑关系

                         Shell脚本的第一句话!!!!!!!!!!(必须写)

                         #!/bin/bash-------定义脚本解释器

                                                #!-----shebang符号

                                                /init----读取运行级别

                                                蓝色链接文件(链接到执行文件上)  绿色执行文件

                                                Chkconfig----控制开机启动  

                      /etc/shells------查看当前系统支持的shell程序

                      /sbin/nologin----虚拟用户用来跑服务  

    1-499是虚拟用户 0 root 500以后是普通用户

                      echo $SHELL –--查看当前会话的shell程序

    /etc/passwd ----制定了用户默认支持的shell程序(/sbin/nologin)

    Shell的执行:

             (1)Bash命令来执行脚本

                      -n----查看shell脚本的逻辑错误(注意:单词写错是不管的)

                      -x----逐行显示执行的脚本程序(方便排除错误)

             (2)授权 chmod u+x filename.sh

                      使用全路径执行脚本即可

    4.变量

             $HOME 环境变量

                         局部变量 declare—定义变量类型 变量是命名的内存空间,用来存储数据

                         本地变量 local在函数中使用,只在函数之中有效

    变量类型:

    数值型:

    整型:int在shell脚本中尽量不要进行较大的整型运算,否则会出现数值溢出

                      浮点型 float

                      布尔值 1/0(真/假)true/false

               字符串:

    普通字符及字符串

    数组

              基于字符串的类型的编程语言的分类:

                              强类型语言---数值必须被定义才可以可以进行处理或运算

                              弱类型语言---例如python,编程语言可以自动识别变量类型

                      【*多态*】一个数据具有多种属性,最后使用的属性取决于最后和它运算的数据

    传参

           $? ---- 上一条命令的执行状态 0正确 1-255错误

           $1 $2 … ${10} ------ 命令后面传入脚本的数据,以空格为分隔符

           $# -------- 统计传参数量 ${$#} ---- 取该条命令的最后一个传递的参数

           $* -------- 表示所有传参,所有的传参以字符串的形式输出

           $@ ------- 表示所有的传参,所有的传参以列表的形式输出

           【工作中要对所有的传参进行操作的时候,就要考虑$*和$@】

             定义变量格式:    一个等号叫赋值,两个等号相当于-eq      

                      NAME=VALUE   shell脚本中不要敲空格

                      declare---定义变量类型 -i----定义变量为整数

                                                                  -a-----数组

                                                                  -l---大写转换小写

                                                                 -r---只读

             变量命名:

    1. 下划线的方式指定变量名称
    2. 驼峰命名方式

                                      

    5.test文件测试、条件判断

             在脚本中,我们需要进行语句的分支;说白了就要进行判断,判断基于要使用test

             test使用格式:

    1. test [option] file
    2. [ 条件语句 ]----前后有空格

    常见的test选项:

    1. 比较选项

    -eq 等于

    -ne 不等于

    -gt 大于

    -ge 大于等于

    -lt  小于

    -le  小于等于

                      2.判断选项

                               -f  判断是否为普通文件

                               -d  判断是否为目录文件

                 -L  判断是否为链接文件

                 -r -w -x --- 判断文件是否具有读写执行权限

     

                      3.关联选向

                              -o 或

                              -a 与

                              !  非

    4.字符串判断

     

    = 判断两边的字符串是否相等 -eq是判断数值是否相等

    != 不等于

    -z 判断字符串长度是否为0,长度为0是假;换种说法,判断字符串是否存在

    -n 和-z相反 存在为假 不存在为真

    5.逻辑运算

             与 && 两边的命令都为真结果为真

             或 ||  两边的命令一边为真就是真 同时为假就是假

             非 !=

             这个逻辑运算符,前后对接的都是单独存在的命令;

             [ $? -eq 0 ] && exit 0 || exit 1

    6.算术运算

             let 1+1 let i++

             expr 1*1

             $[$1 + 10]

             $(($1/$2))

             + - * / %

    **(幂)

     

     

     

  • 相关阅读:
    Java基础之在窗口中绘图——移动曲线的控制点(CurveApplet 3 moving the control points)
    【javascript】BOM介绍
    【javascript】Web Storage机制
    【javascript】50. Pow(x, n)
    【java】6. ZigZag Conversion
    【java】最长回文字符串(源码)
    【javascript】js实现单例模式
    【js注入】js注入
    【bootstrap】bootstrap可关闭警告框
    【h5】h5数据跨域交换postMessage用法
  • 原文地址:https://www.cnblogs.com/KAJIA1/p/11348111.html
Copyright © 2011-2022 走看看