您当前的位置: 首页 > 

顧棟

暂无认证

  • 1浏览

    0关注

    227博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

shell开发快速入门

顧棟 发布时间:2022-08-24 15:09:26 ,浏览量:1

shell开发快速入门

文章目录
  • shell开发快速入门
    • 初识bash
      • 什么是shell
      • bash shell的主要功能
    • shell的变量
      • 变量的设置与显示
      • 变量的规则
      • 变量的作用域
      • 变量的类型
      • 变量内容的变更
    • bash的环境配置文件
        • login shell的配置文件读取流程
    • bash的通配符
      • bash的特殊字符
    • 数据流重定向
      • 双向重定向
    • 命令分类
      • 管道命令
      • 参数代换:xargs
      • 选取命令
      • 排序命令
      • 字符转换命令
      • 分割命令
      • 数据处理命令
    • shell中的正则
      • 特殊字符
      • 基础正则表达式
      • 扩展正则表达式
    • shell 脚本
      • 脚本format
      • 表达式判断
      • 脚本的默认变量
      • 条件判断语句
        • if else语句
        • case语句
      • 循环语句
        • while循环
        • until循环
        • for循环
    • function化
    • 脚本的追踪调试

初识bash 什么是shell

可以操作应用程序的接口都可以称为shell,但是狭义上也指命令行方面的软件。shell的功能只是提供用户操作系统的一个接口,因此这个shell需要可以调用其他软件。

bash 命令行界面的shell

目前bash是Linux的默认shell。

除了bash shell还有其他shell,系统支持的shell都会写到/etc/shell文件中。

用户的默认shell写在 /etc/passwd文件中。

bash shell的主要功能
  • 历史命令

    本次登录的历史命令,存储在内存之中,通过上下键查询。本次登录之前的任务,存储在~/.bash_history文件中。

  • 命令补齐

    在字母之后尝试按【Tab】键,会进行命令的提示和补全。或者文件的提示和补全。

  • 命令别名设置

    为常用命令设置别名,可以简化输入。执行alias lm='ls -a'后,输入lm命令效果等同于ls -a。默认本次shell有效。取消别名 unalias lm

  • 作业控制

    job的前台 后台控制。后台任务可以不用担心【Ctrl】+C中断进程。

  • 程序脚本

    可以实现程序化的执行命令。bash script文件以.sh文件后缀名结尾。

shell的变量 变量的设置与显示

echo命令显示变量值

echo $变量名

unset取消变量

unset $变量名
变量的规则
  1. 变量名与变量值通过=连接
  2. =之间不能有空格符
  3. 变量名由数字和英文组成,开头字符不能为数字
  4. 变量值中若含有空格符,需要通过双引号或者单引号连接
  5. 双引号中的特殊字符,保留特殊字符的原本特性,如$
  6. 单引号中的特殊字符,会变成一般字符(纯文本)
  7. 可以使用转义字符,将特殊字符变成一般字符
  8. 在一串命令中可以使用反单引号"`命令`“,或者”$(命令)"来优先执行,并将执行结果通过给其他命令。
  9. 若需要将变量的作用域扩大,使用export将变量变为环境变量。
  10. 大写变量为系统默认变量,自定义的变量请勿使用全大写。
  11. 可以使用unset来取消变量,是变量失效。

系统的默认变量可以使用env命令,查询出来。$?是两个特殊变量。$代表当前shell的线程号,使用命令echo $$可以输出。?代表上一个命令的回传值,表明命令是否成功执行。0代表成功执行,其他值均代表错误。可以通过ehco $?命令输出结果。

变量的作用域

【shell局部变量】【shell环境变量】【用户系统变量】

当启动一个shell时,操作系统会分配一块内存给shell使用,此内存的变量(shell环境变量)可以让子线程取用。

当父进程创建一个变量,此时变量是shell局部变量,在进行export变量时,会将自定义的变量写到上述的shell的内存中,此时变量升级为shell环境变量

当从父shell中加载另一个shell的时候,子shell会将父shell环境的变量所在的存储导入到自己的存储中。若父shell退出,则变量失效。

若开辟了一个新的远程连接shell,将无法读取另一个远程shell中的shell环境变量。若想其他远程连接shell可以共享变量,可以讲变量写入用户的~/.bash_profile中,用户每次登录都会加载里面的数据。

变量的类型

变量的类型只有字符串类型(默认),整数类型,和数组类型,可以通过declare或者typeset来声明变量。

变量内容的变更

内容的删除,替换,截取

变量的长度:echo ${#变量}

变量设置方式说 明${变量#关键字}若变量内容从头开始的数据符合”关键字“,则将符合的最短数据删除${变量##关键字}若变量内容从头开始的数据符合”关键字“,则将符合的最长数据删除${变量%关键字}若变量内容从尾向前的数据符合”关键字“,则将符合的最短数据删除${变量%%关键字}若变量内容从尾向前的数据符合”关键字“,则将符合的最长数据删除${变量/旧字符串/新字符串}若变量内容符合”旧字符串“,则第一个旧字符串会被新字符串替换${变量//旧字符串/新字符串}若变量内容符合”旧字符串“,则全部个旧字符串会被新字符串替换${变量:number}从左往右 变量值的第number个字符截取到变量值的末尾${变量:0-number}或者${变量: -number}从变量值的倒数第number个字符开始截取到变量值的末尾${变量:number:length}从左往右 变量值的第number个字符开始,截取length个字符${变量:0-number:length}或者${变量: -number:length}从变量值的倒数第number个字符开始,截取length个字符${变量:0-number1:-number2}从变量值的倒数第number1个字符开始截取变量值到末尾,再之前截取的结果基础上,截取最后的number2个字符。从Centos 7支持。

变量的根据str变量觉得变量var

变量设置方式str没有设置str为空字符串str已设置非空字符串var=${str-expr}var=exprvar=var=$strvar=${str:-expr}var=exprvar=exprvar=$strvar=${str+expr}var=var=exprvar=exprvar=${str:+expr}var=var=var=exprvar=${str=expr}str=exprvar=exprstr=不变var=exprstr=不变var=$strvar=${str:=expr}str=exprvar=exprstr=exprvar=exprstr=不变var=$strvar=${str?expr}expr输出值stderrvar=var=strvar=${str:?expr}expr输出值stderrexpr输出值stderrvar=str bash的环境配置文件

login shell 需要输入账号密码才能获取的bash

nolong shell 不需要输入账号密码才能获取的bash

login shell与non-login shell的加载配置文件是不一样的。

login shell的配置文件读取流程
#mermaid-svg-OiVI1rYkd9KLSLLH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OiVI1rYkd9KLSLLH .error-icon{fill:#552222;}#mermaid-svg-OiVI1rYkd9KLSLLH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OiVI1rYkd9KLSLLH .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-OiVI1rYkd9KLSLLH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OiVI1rYkd9KLSLLH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OiVI1rYkd9KLSLLH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OiVI1rYkd9KLSLLH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OiVI1rYkd9KLSLLH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OiVI1rYkd9KLSLLH .marker.cross{stroke:#333333;}#mermaid-svg-OiVI1rYkd9KLSLLH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OiVI1rYkd9KLSLLH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OiVI1rYkd9KLSLLH .cluster-label text{fill:#333;}#mermaid-svg-OiVI1rYkd9KLSLLH .cluster-label span{color:#333;}#mermaid-svg-OiVI1rYkd9KLSLLH .label text,#mermaid-svg-OiVI1rYkd9KLSLLH span{fill:#333;color:#333;}#mermaid-svg-OiVI1rYkd9KLSLLH .node rect,#mermaid-svg-OiVI1rYkd9KLSLLH .node circle,#mermaid-svg-OiVI1rYkd9KLSLLH .node ellipse,#mermaid-svg-OiVI1rYkd9KLSLLH .node polygon,#mermaid-svg-OiVI1rYkd9KLSLLH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OiVI1rYkd9KLSLLH .node .label{text-align:center;}#mermaid-svg-OiVI1rYkd9KLSLLH .node.clickable{cursor:pointer;}#mermaid-svg-OiVI1rYkd9KLSLLH .arrowheadPath{fill:#333333;}#mermaid-svg-OiVI1rYkd9KLSLLH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OiVI1rYkd9KLSLLH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OiVI1rYkd9KLSLLH .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-OiVI1rYkd9KLSLLH .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-OiVI1rYkd9KLSLLH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OiVI1rYkd9KLSLLH .cluster text{fill:#333;}#mermaid-svg-OiVI1rYkd9KLSLLH .cluster span{color:#333;}#mermaid-svg-OiVI1rYkd9KLSLLH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OiVI1rYkd9KLSLLH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
read
read
read
read
read
read
/etc/profile
~/.bash_profile
操作bash
/etc/inputrc
/etc/profile.d/*.sh
/etc/sysconfig/i18n
~/.bashrc
/etc/bashrc

所有用户(login shell)都会去读取/etc/profile文件,这是一个整体环境的配置文件,在完成/etc/profile的相关逻辑之后,会读取~/.bash_profile配置文件,这是一个用户的个人配置文件,在这个配置文件读取中会读取~/.bashrc文件的内容。这个配置文件~/.bashrc比较特殊,在non-login shell的时候也会去读取。常规情况下,一些用户的配置建议可以写到~/.bashrc这个文件中。

bash的通配符 符号意义*代表0到无穷个任意字符?代表一个任意字符[]同样代表一个有一个在中括号内的字符(非任意字符)[-]若有减号在中括号内时,代表在编码顺序内的所有字符。例如[0-9]代表0-9之间的所有数字[^]若中括号内的第一个字符为指数符号^,那表示反向选择,例如[^abc],代表一定有一个字符,只要非a,b,c的其他字符。 bash的特殊字符 符号意义#批注符号,在脚本中作为注释。不执行\转义符号,将特殊符号或者通配符转成一般字符;连续命令执行分隔符~用户的主文件夹$使用变量的前导符&作业控制,将命令变成后台执行!逻辑意义上的非(not)/目录符号>,>>数据流重定向,输出方向,替换和追加控制。

  • 1>:以覆盖的方式将正确的数据输出到指定的文件或者设备上;
  • 1>>:以追加的方式将正确的数据输出到指定的文件或者设备上;
  • 2>:以覆盖的方式将错误的数据输出到指定的文件或者设备上;
  • 2>>:以追加的方式将错误的数据输出到指定的文件或者设备上;

/dev/null垃圾黑洞设备,这个可以忽略信息,吃掉任何导向这个设备的信息。

2> /dev/null:错误信息忽略

> list1 2> list2:正确信息输出到list1,错误信息输出到list2

> list 2>&1:将正确信息和错误信息都写到list中,特殊写法2>&1

cat file1 < file2:将file2的内容写到file1中

cat file 或>> 将数据流传送给文件或设备,除非重新读取该文件或设备,否则无法继续使用这个数据流。若我们需要在处理过程中将数据的部分信息村夏利,可以使用双向重定向(tee命令)。他可以同时将数据输出到文件和屏幕。

#mermaid-svg-iNK2hXxrvZO3GzBb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-iNK2hXxrvZO3GzBb .error-icon{fill:#552222;}#mermaid-svg-iNK2hXxrvZO3GzBb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iNK2hXxrvZO3GzBb .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-iNK2hXxrvZO3GzBb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iNK2hXxrvZO3GzBb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iNK2hXxrvZO3GzBb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iNK2hXxrvZO3GzBb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iNK2hXxrvZO3GzBb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iNK2hXxrvZO3GzBb .marker.cross{stroke:#333333;}#mermaid-svg-iNK2hXxrvZO3GzBb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iNK2hXxrvZO3GzBb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iNK2hXxrvZO3GzBb .cluster-label text{fill:#333;}#mermaid-svg-iNK2hXxrvZO3GzBb .cluster-label span{color:#333;}#mermaid-svg-iNK2hXxrvZO3GzBb .label text,#mermaid-svg-iNK2hXxrvZO3GzBb span{fill:#333;color:#333;}#mermaid-svg-iNK2hXxrvZO3GzBb .node rect,#mermaid-svg-iNK2hXxrvZO3GzBb .node circle,#mermaid-svg-iNK2hXxrvZO3GzBb .node ellipse,#mermaid-svg-iNK2hXxrvZO3GzBb .node polygon,#mermaid-svg-iNK2hXxrvZO3GzBb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iNK2hXxrvZO3GzBb .node .label{text-align:center;}#mermaid-svg-iNK2hXxrvZO3GzBb .node.clickable{cursor:pointer;}#mermaid-svg-iNK2hXxrvZO3GzBb .arrowheadPath{fill:#333333;}#mermaid-svg-iNK2hXxrvZO3GzBb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iNK2hXxrvZO3GzBb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iNK2hXxrvZO3GzBb .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-iNK2hXxrvZO3GzBb .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-iNK2hXxrvZO3GzBb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iNK2hXxrvZO3GzBb .cluster text{fill:#333;}#mermaid-svg-iNK2hXxrvZO3GzBb .cluster span{color:#333;}#mermaid-svg-iNK2hXxrvZO3GzBb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-iNK2hXxrvZO3GzBb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
标准输入
标准输出
标准错误输出
file
command
file
screen

如何简单的一次输入多重命令

借助 ;&&||

cmd1; cmd2:命令1和命令2之间没有命令相关性,在命令1执行后会执行命令2。

cmd1&& cmd2 :若命令1执行完毕且正确,则再去执行命令2;若命令1执行完毕且失败,则不再执行命令2。

cmd1|| cmd2 :若命令1执行完毕且正确,则不再执行命令2;若命令1执行完毕且失败,则再执行命令2。

命令分类 管道命令

什么是管道命令,有什么功能,有什么使用注意点

管道命令|,仅能处理经由前面一个命令传来的正确信息(standard output),对错误信息(standard error)并没有处理能力。

cmd1 | cmd2:命令2会对cmd1命令的标准正确输出继续处理。

#mermaid-svg-bfz8y29kjzNp4JZq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bfz8y29kjzNp4JZq .error-icon{fill:#552222;}#mermaid-svg-bfz8y29kjzNp4JZq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bfz8y29kjzNp4JZq .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-bfz8y29kjzNp4JZq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bfz8y29kjzNp4JZq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bfz8y29kjzNp4JZq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bfz8y29kjzNp4JZq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bfz8y29kjzNp4JZq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bfz8y29kjzNp4JZq .marker.cross{stroke:#333333;}#mermaid-svg-bfz8y29kjzNp4JZq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bfz8y29kjzNp4JZq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bfz8y29kjzNp4JZq .cluster-label text{fill:#333;}#mermaid-svg-bfz8y29kjzNp4JZq .cluster-label span{color:#333;}#mermaid-svg-bfz8y29kjzNp4JZq .label text,#mermaid-svg-bfz8y29kjzNp4JZq span{fill:#333;color:#333;}#mermaid-svg-bfz8y29kjzNp4JZq .node rect,#mermaid-svg-bfz8y29kjzNp4JZq .node circle,#mermaid-svg-bfz8y29kjzNp4JZq .node ellipse,#mermaid-svg-bfz8y29kjzNp4JZq .node polygon,#mermaid-svg-bfz8y29kjzNp4JZq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bfz8y29kjzNp4JZq .node .label{text-align:center;}#mermaid-svg-bfz8y29kjzNp4JZq .node.clickable{cursor:pointer;}#mermaid-svg-bfz8y29kjzNp4JZq .arrowheadPath{fill:#333333;}#mermaid-svg-bfz8y29kjzNp4JZq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bfz8y29kjzNp4JZq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bfz8y29kjzNp4JZq .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-bfz8y29kjzNp4JZq .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-bfz8y29kjzNp4JZq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bfz8y29kjzNp4JZq .cluster text{fill:#333;}#mermaid-svg-bfz8y29kjzNp4JZq .cluster span{color:#333;}#mermaid-svg-bfz8y29kjzNp4JZq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bfz8y29kjzNp4JZq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
标准输出==标准输入
标准输出==标准输入
cmd1
cmd2
cmd3

使用管道命令的注意点:

  1. 界定符号|后面的命令必须要能够接受标准输入()的数据才行,这样的命令才是管道命令。

  2. 管道命令仅仅处理经由前面一个命令传来的正确信息(standard output),对错误信息(standard error)并没有处理能力。

  3. 在管道命令的使用当中会借助减号-来替代stdin和stdout

    tar -cvf - /home | tar -xvf -
    # 其中并非将/home里面的文件打包成文件,而是传送到stdout中(-代替了),经过管道后将数据流传给后面的解压命令 后面的-就是接受了前面stdout。
    
参数代换:xargs

很多命令其实并不支持管理命令,这样需要使用xargs来提供该命令引用standard input之用。

find logs | ls -l
# 会将当前目录下的所有信息展示出来,这不是我们想要的 

find logs | xargs ls -l
logs:
总用量 8
-rw-r--r--. 1 root root  886 8月  17 19:25 CLUSTER_INSTALL_2022-08-17.log
-rw-r--r--. 1 root root 1607 8月  17 19:25 NODE_INSTALL_2022-08-17.log
选取命令

以行为单位,截取出需要的部分

  • cut:以行为单位,截取出需要的部分
  • grep:按行分析数据,获取包含数据的那一行
排序命令

+ sort:用来排序的命令

  • wc:计数命令
  • uniq:去重命令
字符转换命令
  • tr:可以删除一段信息中的部分数据或者替换
  • col:将【tab】按键替换为对等的空格键
  • join:可以讲拥有相同数据的行合并成一行
  • paste:直接合并两行为一行,中间以【tab】按键分隔
  • expand:将【tab】按键转成空格键,一般一个【tab】按键转成8个空格键
分割命令
  • split:将一个文件切割成多个小文件
数据处理命令
  • awk:将一行数据切分为多个字段的方式来处理数据。更适合处理小型的数据处理。
  • seq:作用于一整行数据的处理,将数据进行替换,删除,新增,选取特定行,修改行中数据的功能
shell中的正则 特殊字符

语系配置不同导致英文和数字的选取问题,需要记住正则中的特殊符号,不受语系配置影响。

特殊字符代表意义[:alnum:]代表英文大小写字符以及数字,即0-9,A-Z,a-z[:alpha:]代表任何英文的大小写字符,即A-Z,a-z[:blank:]代表空格键与Tab键[:cntrl:]代表键盘上的控制按键,即CR,LF,Tab,Del等[:digit:]代表数字,即0-9[:graph:]代表除了空格键与Tab键外的其他所有按键[:lower:]代表小写字符,即a-z[:print:] 代表任何可以被打印出来的字符[:punct:] 代表标点符号,即" ’ ? ; : # $[:upper:] 代表英文的大写字符,即A-Z[:space:]代表任何会产生空格的只读,包括空格键 tab键 CR等[:xdigit:]代表十六进制的数字类型,即0-9 A-F a-f的数字与字符 基础正则表达式 RE字符意义与范例^Word待查询的字符串(Word)在行首Word$待查询的字符串(Word)在行尾.代表一定有一个任意的字符\转义字符*重复0到无穷个的前字符[list]从字符集的RE字符(list)中找到想要的字符[n1-n2]从字符集的RE字符(n1-n2)中找到想要的字符,n1-n2之间是连续的值,具体跟语系设置相关[^list]从字符集的RE字符(list)中找不到的字符或范围\{n.m\}连续n到m个的前一个RE字符。若为\{n\},代表连续n个前一个RE字符。若\{n,\}代表连续n个以上的前一个RE字符。 扩展正则表达式 RE字符意义与范例+重复1个或1个以上的前一个RE字符?0个或者1个的前一个RE字符|用或的方式找( )找出组的字符串,()中是组合( ) +多个重复组的判别 shell 脚本

程序化脚本,利用shell的功能写一个程序,达到我们的处理能力。脚本是一个以’.sh’为文件后缀名的纯文本文件。shell脚本编写的注意事项

  1. 命令的执行时从上至下,从左而右的分析与执行
  2. 命令的执行的时候,命令、参数之间多个空白会被忽略
  3. 空白行会被忽略,tab键输入的空白,也被视为空格键
  4. 如果读取到一个Enter符号(CR)换行,就来时尝试执行该行(或该串)命令
  5. 若一行内容太多可以使用\[enter]扩展至下一行
  6. #用来进行注释
脚本format
#!/bin/bash
# Author      : Donny
# History     :
# 2022/08/16    Version1   第一次发布的内容
# Program     : 脚本的功能说明
#                         例如:sh es1.7_cluster_install.sh /opt/gudong sit true 222
####################################################################################

# 程序主体
echo -e "Hello World!"

# 告知执行结果
exit 0
  • 第一行声明脚本使用的shell
  • 脚本作者
  • 脚本发布历史
  • 程序的功能说明
  • 主要的程序部分
  • 告知执行结果 成功用0 错误用其他
表达式判断
  • 通过test命令的测试功能判断

  • 判断符[]来判断

    [ "Donny" == "${name}" ]

    使用注意点:

    1. 中括号内的每个组件都需要使用空格分隔
    2. 中括号内的变量,最好都使用双引号括起来
    3. 中括号内的常量,最好最好都使用双引号或单引号括起来
脚本的默认变量

$0:代表执行脚本的文件名

$number:代表第n个参数,例如$1代表第一个参数

$#:代表参数的个数

$@:代表"$1"、“$2”、“$3”,每个变量都是独立的

$*:代表““$1c$2c$3””,其中c为分隔符,默认是空白键。

shift键会造成参数的偏移,就是删除前面的变量,将后面的变量前移

shift默认偏移一个变量 shift number 就是偏移number个变量

条件判断语句 if else语句

简单的判断条件,若有多个条件可以使用中括号隔开,多个中括号之间可以用&&||隔开,&&代表and||代表or

if [ 条件判断式 ]; then
程序段
fi

多重、复杂条件判断式

if [ 条件判断式1 ]; then
程序段
else
程序段
fi
if [ 条件判断式1 ]; then
程序段
elif [ 条件判断式2 ]; then
程序段
else
程序段
fi
case语句
case $变量名称 in
"变量内容1")
程序段
;;
"变量内容1")
程序段
;;
程序段
*) # default之意
;;
esac
循环语句 while循环

当满足判断条件时,执行程序段。

while [ 判断条件 ]
do
程序段
done
until循环

一直执行程序段,之道满足判断条件时,跳出循环。

until [ 判断条件 ]
do
程序段
done
for循环
for var in con1 con2 con3 # for var in $变量名
do
程序段
done
for( ( 初始值; 限制值; 执行步长 ) ) # for( ( i=1; i            
关注
打赏
1663402667
查看更多评论
0.0377s