• Shell脚本编程


    1 基本介绍

    1.1 什么是Shell

    • 是一个用C语言编写的程序,它是用户使用Linux的桥梁
    • 是一种命令语言,又是一种程序设计语言
    • 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务

    1.2 什么是Shell Script

    • 是一种为Shell编写的脚本程序

    1.3 Shell能做什么

    • 将多个命令写在一起,让用户很轻松的就能执行一个文件的Shell脚本,就能够一次执行多个命令。

    2 运行环境

    2.1 Shell 环境

    • Bourne Again Shell (/bin/bash)
    • Bourne Shell (/usr/bin/sh或/bin/sh)
    • 只要有一个能编写代码的文本编辑器vi和一个能解释执行的脚本解释器就可以了

    2.2 bash环境文件

    • .bash_profile
      • 设置环境变量
      • 账户一建立,该文件就存在
    • .bashrc
      • 存放针对bash的命令
      • .bash_profile之后执行
    • .bash_logout
      • 仅在退出注册时执行
    • .bash_history
      • 历史记录

    3 运行基础

    3.1 Shell脚本格式

    • 格式:vi 脚本名字.sh
      • 脚本的后缀名可以任意修改,任然可以正常运行
    • 脚本第一行格式:#!/bin/bash
      • 符号#!用来指定该脚本文件的解析程序

    3.2 脚本的执行

    • 方式一
      • 先赋予一个执行的权限:chmod +x 脚本文件名字
      • 编译:./脚本文件的名字
    • 方式二
      • /bin/bash 脚本文件的名字

    4 编程语法

    4.1 变量

    • 变量的声明格式
      • 变量名字=变量值
      • 等号两端不能有空格
    • 变量名的命名规则
      • 首字母为字母
      • 中间不能有空格,可以使用下划线和数字
      • 不能使用标点符号
      • 不能使用bash关键字
    • 使用一个定义过的变量
      • 在变量名前面加$符号即可
      • 变量名外面的花括号时可选的,起帮助解释器识别变量边界的作用
    • 只读变量
      • readonly 变量名
    • 删除变量
      • unset 变量名

    4.2 字符串

    • 拼接字符串
    • 获取z字符串长度
      • ${#变量的名字}
    • 提取子字符串
      • ${变量的名字:开始字符下标:截取的长度}
      • 字符串第一个位置下标为0

    4.3 数组

    • 数组格式
      • 相当于多个相同类型的变量组成的集合
      • 数组名=(值1 值2 ... 值n)
      • 数字元素用空格隔开
    • 读取数组
      • ${数组名[下标]}
      • 使用@获取数组中的所有元素
    • 获取数组长度
      • 获取数组元素个数:${#数组名[@]}
      • 获取数组单个元素长度:${#数组名[下标]}

    4.4 注释

    • "#"开头的行就是注释,会被解释器忽略

    4.5 基本运算符

    • 算数运算符

      • expr是一款表达式计算工具,使用它能完成表达式的求值操作
      • 两个数相加(使用的是反引号:``)
      • 运算符与运算值之间必须有空格(运算符两边必须有空格)
      • 使用乘号是前面加上反斜杠:*
    • 关系运算符

      • -eq:检测两个数是否相等,相等返回true
      • -ne:检测两个数是否相等,不相等返回true
      • -gt:检测左边的数是否大于右边
      • -lt:检测左边的数是否小于右边
      • -ge:检测左边的数是否大于等于右边
      • -le:检测左边的数是否小于等于右边
    • 布尔运算符

      • !:非运算
      • -o:或运算,有一个表达式值为true,则结果为true
      • -a:与运算,只有两个表达式值为true,结果才为true
      • 优先级:!>-a>-o
    • 逻辑运算符

      • &&:逻辑的AND
      • ||:逻辑的OR
    • 字符串运算符

      • =:检测两个字符串是否相等,相等为true $a = $b
      • !=:检测两个字符串长度是否相等,不等为true
      • -z:检测字符串长度是否为0,为0 返回true -z $a
      • -n:检测字符串长度是否为0,不为0 返回true
      • str:检测字符串是否为空,不为空返回true
    • 文件测试运算符

      • -d file:检测文件是否是目录
      • -f file:检测文件是否是普通文件
      • -r file:检测文件是否可读
      • -w file:检测文件是否可写
      • -x file:检测文件是否可执行
      • -s file:检测文件是否为空(文件大小是否为0)
      • -e file:检测文件(包括目录)是否存在
      • file前面加$符号
    • echo命令

      • 格式:echo "字符内容"
      • 转义字符:进行转义的操作
        • :后退
        • :换行
        • :水平指标符号
        • \:反斜杠字符
        • c:不换行
        • 开启转义:e(除转义特殊字符外)
      • read 变量名
        • 从终端输入值,将其分配给该变量
      • echo "It is pushed to the file." > myfile
        • >:把操作结果保存在指定文件中(覆盖操作)
        • >>:追加操作
    • printf命令

      • printf 格式声明 与格式声明相对应的参数列表
      • %d 整数
      • %s 字符串
      • %c 相应参数的第一个字符
      • %f 浮点数
    • test命令

      • 检查某个条件是否成立
      • if test $a -gt 10
    • 数值运算

      • $(())

      • expr ``
        
    • 条件判断

      • if语句

        • 格式一:

          if [ 判断条件 ](“判断条件"l两边有空格)
          then
          	语句块
          fi
          
        • 格式二

          if [ 判断条件 ]
          then
          	语句块1
          else
          	语句块2
          fi
          
        • 格式三

          if [ 判断条件1 ]
          then
          	语句块1
          elif [ 判断条件2 ]
          then
          	语句块2
          else
          	语句块3
          fi
          
        • case语句

          case $变量名 in
          “第一个变量内容”)
          	程序段
          	;;
          “第二个变量内容”)
          	程序段
          	;;
          *)
          	不包含第一个变量内容和第二个变量内容的其他程序段
          	;;
          esac
          
    • 循环

      • while...do..done

        while ((判断条件))
        do
        	程序段
        done
        
      • break和continue

        break:跳出所有循环
        continue:让程序跳转到循环开始的地方(判断条件)
        
      • for...do..done

        • 格式一
        for ((初始值;条件;运算语句))
        do
        	程序段
        done
        
        • 格式二
        for 变量名 in 值1 值2 ...
        do
        	程序段
        done
        
    • 函数

      • 格式一

        function 函数名(){
        	函数体
        }
        
      • 格式二

        函数名(){
        	函数体
        }
        
      • 变量

        • 全局变量:在脚本中,函数外
        • 局部变量:在脚本中,函数内
      • 返回值

        • 在函数体的最后加:return 返回值(整数)
        • 返回值的结果只能通过$?来进行获取
      • 参数传递

        • 通过$n的形式来获取传递过来的参数值(n表示第几个传过来的参数)
        • 当n大于等于10时,格式为${n}
        • $#:参数总数
        • $*:作为一个字符串输出所有参数
      • 递归函数

        • 自己调用自己的函数
  • 相关阅读:
    面向对象三大特征------多态
    接口的概念
    面向对象(抽象类)
    面向对象三大特征------继承
    面向对象三大特征------封装
    成员变量和局部变量的区别
    20180822 ajax post 方式请求
    20180815 权限
    20180815 视图
    20180814 夜晚小目标
  • 原文地址:https://www.cnblogs.com/aaron-zhou/p/12046326.html
Copyright © 2020-2023  润新知