• bash脚本基础


    1.bash特性之命令补全与路径补全

    命令补全:敲击Tab按键

    shell程序在接收到用户执行命令的请求且分析完成后,最左侧字符串将被当作命令去分析$PATH标量所指定的各路径下去查找

    查找机制:

    1.查找内部命令
    2.查找外部命令:去$PATH变量下所指定的各路径下,自左而右逐个搜索各目录下的文件名:打头的字符串如果能唯一标识,则直接补全;不能唯一标识,在敲击一次Tab按键,可给出列表;
    3.错误:没有任何命令被识别,则无响应

    路径补全:

    在给定的起始路径的上级目录下,以对应路径下的打头字符串来逐一匹配上级目录下的每个文件

    2.bash特性之命令行展开

    把命令行给定的特殊符号自动转化为相应的字符串的机制
    例:
    “~”:自动切换为家目录
    “~ username”:切换到指定用户的家目录
    “{}”:可承载一个以逗号分割的路径列表,能够将其展开为多个独立的路径

    #批量创建空文件夹
    mkdir /tmp/{x,y,z} = mkdir /tmp/x /tmp/y /tmp/z
    mkdir /tmp/{x/y,m/{m,n}} = mkdir /tmp/x/y /tmp/m/m /tmp/m/n
    mkdir /tmp/{x,y}/z = mkdir /tmp/x/z /tmp/y/z
    

    3.bash的特性:命令执行的状态结果

    命令的正常输出结果,叫做命令的返回值
    命令执行的状态结果:成功,失败
    bash用一特殊变量来保存最接近一次的命令执行状态结果:“$?”

    echo $?  #显示命令执行的结果
    

    显示的结果中,0表示命令执行成功,1-255表示没有成功
    命令的输出结果通过引用来保存下来或直接调用,例如:

    mkdir -v `echo $?`
    

    结果是创建以相应数字为文件名的空文件夹

    使用“ `` ”(反引号)

    "''"(引号):强引用
    """"(双引号):弱引用
    "``"(反引号):命令引用

    4.bash的特性之glob通配符

    glob:文件名通配符,能够快速引用多个文件,只指文件名,不包括路径
    、文件名匹配度检测

    元字符:基于元字符可编写匹配模式(pattern)

    "*"(米字符):匹配任意长度的任意字符

    例:
    p* :以p开头的任意字符串,文件名。。。
    pa*:以pa开头的
    *p:以p结尾的

    • p *a:中间有p,结尾为a的

    "?"(问号):匹配任意单个字符

    例:
    p?a:代表三个字符,其中中间的为任意字符
    p?两个字符
    p??,三个字符

    “[ ]”(中括号):匹配指定集合内的任意单个字符

    例:[a-z],[A-Z]:此时不区分大小写
    [0-9]:
    [a-z0-9]:字母与数字
    [[:upper:],[A-Z]]:所有大写字母,只显示大写
    [[:lower:]],只显示小写
    [[:digit:]]
    [[:alpha:]]
    [[:alnum:]]
    [[:space:]]
    [[:punct:]]
    []:匹配指定集合外的任意单个字符,如[[:alpha:]]

    5.bash特性之变量

    程序=指令+数据
    数据:文件、变量
    变量:内存空间,有名称,名称即为变量
    变量赋值:NAME=VALUE
    =:为赋值符号,把VALUE存储到NAME指向的内存空间中

    变量命名:只能使用字母、数字和下划线;而且不能以数字开头;
    变量引用:${NAME}, $NAME
    变量替换:把变量引用符号出现的位置替换为其指向的内存空间中的数据;

    bash变量种类:

    1.本地变量:作用域为当前shell进程;不包括其子进程;
    2.环境变量:使用域为当前shell进程及其子进程;
    3.局部变量:作用域:生效范围,也即可引用到的范围;
    4.位置参数变量
    5.特殊变量

    6.bash特性之IO重定向

    1.输出重定向:重定向程序正常执行的结果

    COMMAND >  /PATH/TO/SOMEFILE  
    覆盖重定向:覆盖目标文件中的原有内容;
    COMMAND >> /PATH/TO/SOMEFILE
    追加重定向:追加新产生的内容至目标文件尾部;
    

    shell的一个功能开关:
    set -C:禁止覆盖输出从定向至已存在的文件
    注意:此时仍然可以使用“>|”至目标文件
    set +C:关闭上述特性

    2.错误重定向:重定向错误的执行结果

    COMMAND 2>  /PATH/TO/SOMEFILE
    错误输出覆盖重定向;
    COMMAND 2>> /PATH/TO/SOMEFILE
    错误输出追加重定向;  
    

    3.合并标准输出与错误输出流

    1.&>,&>>
    2.command > /path/to/somefile 2>&1
    3.command >> /path/to/somefile 2>&1

    4.特殊设备

    1.特殊输出目标:/dev/null,垃圾桶
    2.特殊的输出文件:/dev/zero

    5.输入重定向

    COMMAND < /PATH/FROM/SOMEFILE  
    

    7.bash特性之管道

    COMMAND1 | COMMAND2 | COMMAND3 | ...
    

    练习:
    1.把/etc/passwd文件最后三行信息中所有小写字符改为大写后输出

    cat /etc/passwd | tr 'a-z' 'A-Z'
    

    2.取出/etc/fstab的第六行

    head -n 6 /etc/fstab | tail 1
    

    3.取出/etc目录下所有以p开头的文件或目录,只显示前5个

    ls -a /etc/p* | head 5
    

    特殊命令:
    1.tee命令:
    tee [OPTION]... [FILE]...
    -a:使用追加输出,而非覆盖

    COMMAND | tee /PATH/TO/SOMEFILE
    

    例:

    ls -al /tmp | tee -a /tmp/bashrc
    列出/tmp下的文件,并把结果追加导入到/tmp/bashrc文件中
    

    2.tr命令:
    tr [option] set1 [set2]
    把输出的数据当中的字符,实现对位转换,即把数据中的存在于字符集中的字符,统统转换为字符几种对未的字符;

    1.tr set1 set2 < /path/from/somefile  #字符转换
    2.tr -d set1 < /path/to/somefile      #删除
  • 相关阅读:
    Linux常用命令及详细说明 — 结合工作(侧重性能监控,包括CPU、内存、IO、网络、磁盘等)
    navicat连接不上Linux服务器上的mysql的解决办法
    Git之rebase、merge和cherry pick的区别详解—面试常问
    阿里《JAVA实习生入职测试题—2019最新》之答案详解(连载一)
    技术语言框架学习方法论
    阿里《JAVA实习生入职测试题—2019最新》之答案详解(连载二)
    C# 文件/文件夹一般操作(File、Directory)
    Log4Net 使用及组合公共类
    VmWare 15 设置Centos7 共享文件夹及问题记录
    Centos 7 使用(Service iptables stop/start)关闭/打开防火墙 Failed to stop iptables.service: Unit iptables.service not loaded.
  • 原文地址:https://www.cnblogs.com/zhangpf/p/5657365.html
Copyright © 2020-2023  润新知