SHELL编程脚本基础及进阶

这篇博客详细介绍了Bash Shell脚本的基础和进阶知识,包括程序执行方式、编程基本概念、变量类型、算术与逻辑运算、条件测试、循环结构、函数定义与使用,以及数组和字符串处理等重要内容。同时,还讲解了如何编辑和配置Bash环境,以及处理信号和异常的技巧。对于Shell脚本初学者和进阶者都是宝贵的学习资源。
摘要由CSDN通过智能技术生成
程序
程序
    程序:算法+数据结构
    数据:是程序的核心
    数据结构:数据在计算机中的类型和组织方式
    算法:处理数据的方式

程序编程风格:
    过程式:以指令为中心,数据服务于指令
    对象式:以数据为中心,指令服务于数据

shell程序:提供了编程能力,解释执行
程序的执行方式
计算机:运行二进制指令
编程语言:人与计算机之间交互的语言

低级编程语言:
    机器:二进制的0和1的序列,称为机器指令。与自然语言差异太大,难懂、难写
    汇编:用一些助记符号替代机器指令,称为汇编语言
    如:ADD A,B 将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
    汇编语言写好的程序需要汇编程序转换成机器指令
    汇编语言稍微好理解,即机器指令对应的助记符,助记符更接近自然语言

高级编程语言:
    编译:高级语言-->编译器-->机器代码-->执行 
         C,C++
    解释:高级语言-->执行-->解释器-->机器代码
         shell,python,php,JavaScript,perl
编程基本概念
编程逻辑处理方式:
    顺序执行
    循环执行
    选择执行

shell编程:过程式、解释执行
    编程语言的基本结构:
         各种系统命令的组合
         数据存储:变量、数组
         表达式:a + b
         语句:if
shell编程脚本基础
shell脚本:
   包含一些命令或声明,并符合一定格式的文本文件

格式要求:首行shebang机制
   #!/bin/bash
   #!/usr/bin/python
   #!/usr/bin/perl

shell脚本的用途有:
   自动化常用命令
   执行系统管理和故障排除
   创建简单的应用程序
   处理文本或文件
创建shell脚本
第一步:使用文本编辑器来创建文本文件
   第一行必须包括shell声明序列:#!
       示例:#!/bin/bash
   添加注释
        注释以#开头

第二步:运行脚本
   给予执行权限,在命令行上指定脚本的绝对或相对路径
   直接运行解释器,将脚本作为解释器程序的参数运行

脚本规范
脚本代码开头约定
   1、第一行一般为调用使用的语言
   2、程序名,避免更改文件名为无法找到正确的文件
   3、版本号
   4、更改后的时间
   5、作者相关信息
   6、该程序的作用,及注意事项
   7、最后是各版本的更新简要说明

脚本的基本结构
   #!SHEBANG
   CONFIGURATION_VARIABLES
   FUNCTION_DEFINITIONS
   MAIN_CODE

shell脚本示例
#!/bin/bash
# ------------------------------------------
# Filename: hello.sh
# Revision: 1.1
# Date: 2017/06/01
# Author: wang
# Email: wang@gmail.com
# Website: www.magedu.com
# Description: This is the first script
# Copyright: 2017 wang
# License: GPL
# ------------------------------------------
echo “hello world”

脚本调试
   检测脚本中的语法错误
       bash -n /path/to/some_script
   调试执行
       bash -x /path/to/some_script
变量
变量:命名的内存空间
变量:变量类型
    作用:
        1、数据存储方式
        2、参与的运算
        3、表示的数据范围
    类型:
        字符
        数值:
        	精确数值
        	近似数值
        	整型、浮点型、字符型、布尔型、日期时间型

静态编译语言:使用变量前,先声明变量类型,之后类型不能改变,在编译时检查,如:java,c 
动态编译语言:不用事先声明,可随时改变类型,如bash,Python
强类型语言:不同类型数据操作,必须经过强制转换才同一类型才能运算,如java , c# ,python
    如:以下python代码
    print(‘magedu’+ 10) 提示出错,不会自动转换类型
    print(‘magedu’+str(10)) 结果为magedu10,需要显示转换类型
弱类型语言:语言的运行时会隐式做数据类型转换。无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用
    如:bash 不支持浮点数,php,javascript

Shell中变量命名法则:
    1、不能使程序中的保留字:例如if, for
    2、只能使用数字、字母及下划线,且不能以数字开头
    3、见名知义
    4、统一命名规则:驼峰命名法

Shell中命名建议规则:
    1、变量名大写
    2、局部变量小写
    3、函数名小写
    4、用英文名字,并体现出实际作用
bash中变量的种类
根据变量的生效范围等标准划分下面变量类型
    局部变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
    环境变量:生效范围为当前shell进程及其子进程
    本地变量:生效范围为当前shell进程中某代码片断,通常指函数
    位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
    特殊变量:$?, $0, $*, $@, $#,$$
局部变量
变量赋值:name=‘value’
可以使用引用value
    (1)可以是直接字串:name=“root"
    (2)变量引用:name="$USER"
    (3)命令引用:name=`COMMAND` 
               name=$(COMMAND)
变量引用:${name} 或者 $name
    " " 弱引用,其中的变量引用会被替换为变量值
    ' ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name
环境变量
变量声明、赋值:
    export name=VALUE
    declare -x name=VALUE
变量引用:
    $name, ${name}
显示所有环境变量:
    env
    printenv
    export
    declare -x 
删除变量:
    unset name

bash内建的环境变量
    PATH
    SHELL
    USER
    UID
    HOME
    PWD
    SHLVL
    LANG
    MAIL
    HOSTNAME
    HISTSIZE
    _ 下划线
只读和位置变量
只读变量:只能声明,但不能修改和删除
    声明只读变量:
        readonly name
        declare -r name
    查看只读变量:
        readonly -p 
位置变量:在脚本代码中调用通过命令行传递给脚本的参数
    $1, $2, ... 对应第1、第2等参数,shift [n]换位置
    $0 命令本身
    $* 传递给脚本的所有参数,全部参数合为一个字符串
    $@ 传递给脚本的所有参数,每个参数为独立字符串
    $# 传递给脚本的参数的个数
    注意:$@ $* 只在被双引号包起来的时候才会有差异
    set -- 清空所有位置变量
退出状态
进程使用退出状态来报告成功或失败
    0 代表成功,1-255代表失败
    $? 变量保存最近的命令退出状态
例如:
    ping -c1 -W1 hostdown &> /dev/null 
    echo $?

退出状态码
bash自定义退出状态码
    exit [n]:自定义退出状态码
    注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
    注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
算术运算
bash中的算术运算:help let
    +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义
    实现算术运算:
        (1) let var=算术表达式
        (2) var=$[算术表达式]
        (3) var=$((算术表达式))
        (4) var=$(expr arg1 arg2 arg3 ...)
        (5) declare -i var = 数值
        (6) echo ‘算术表达式’ | bc
bash有内建的随机数生成器变量:$RANDOM(0-32767)
    示例:生成 0 - 49 之间随机数
         echo $[$RANDOM%50]
赋值
增强型赋值:
    +=, -=, *=, /=, %=
let varOPERvalue
    例如:let count+=3
    自加3后自赋值
自增,自减:
    let var+=1
    let var++
    let var-=1
    let var--
逻辑运算
true, false
    1, 0
与:只有全为1,结果为1,只要有一个是0,结果就是0
    1 与 1 = 1
    1 与 0 = 0
    0 与 1 = 0
    0 与 0 = 0
或:只要有一个1,结果为1,全为0,结果才为0
    1 或 1 = 1
    1 或 0 = 1
    0 或 1 = 1
    0 或 0 = 0
非:!
    ! 1 = 0 ! true
    ! 0 = 1 ! false
短路运算
    短路与:cmd1 && cmd2 :如果cmd1 结果为失败,不执行cmd2 ,如果cmd1 成功,执行cmd2 
        第一个为0,结果必定为0
        第一个为1,第二个必须要参与运算
    短路或:cmd1 || cmd2: 如果cmd1 成功,不执行cmd2,如果cmd1失败,执行cmd2
        第一个为1,结果必定为1
        第一个为0,第二个必须要参与运算
异或:^
    异或的两个值,相同为假,不同为真
条件测试
判断某需求是否满足,需要由测试机制来实现
   专用的测试表达式需要由测试命令辅助完成测试过程
评估布尔声明,以便用在条件性执行中
   • 若真,则返回0 
   • 若假,则返回1 
测试命令:
   • test EXPRESSION
   • [ EXPRESSION ] 
   • [[ EXPRESSION ]]   一般用于正则表达式的时候
   注意:EXPRESSION前后必须有空白字符
bash的数值测试
-v VAR 
    变量VAR是否设置
数值测试:
    -gt 是否大于
    -ge 是否大于等于
    -eq 是否等于
    -ne 是否不等于
    -lt 是否小于
    -le 是否小于等于
bash的字符串测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值