首页 > 系统相关 >简述Shell编写规范与变量的定义

简述Shell编写规范与变量的定义

时间:2022-10-25 19:01:29浏览次数:55  
标签:脚本 输出 Shell 命令 简述 shell 编写 执行 bash

1  shell脚本

1.1 shell脚本的概述

  • 将要执行的命令按顺序保存到一个文本文件
  • 给该文件可执行权限
  • 课结合各种shell控制语句以完成更复杂的操作

shell是一个面向字符串的编程语言,介于系统内核与用户之间,负责解释命令行,可用跟Python之类的其他语言配合起来,比如某个复杂的功能使用一个Python脚本来实现,然后再shell中调用这个脚本实现比较复杂的功能,或者反过来,再Python脚本中调用外部的shell脚本来提高自动化的效率。

  • shell可针对Linux系统做自动化运维和状态监控

  • python可针对通过API接口对应用程序做数据的收集、统计和分析

shell脚本的应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行
  • 命令解释器,"翻译官"介于内核和用户之间的翻译官

1.3 .shell脚本的类型

我们可用使用vim /etc/shells命令查看shell脚本的类型:

 

Linux中常见的shell

bash:基于gun的框架下发展的shell

cas:类似c语言的shell

tcsh:整合了csh提供了更多的功能

sh:已经被bash替换

nologin:这个shell让用户无法登陆

1.4 shell脚本的构成与编程规范

shell脚本就是将命令按顺序一一列出,最后自动执行。

执行需要权限,也可以直接使用绝对。

脚本其实并不复杂,通用脚本环境改变后依然可以使用的脚本。

可结合各种shell控制语句以完成更复杂的操作

构成:

1)脚本申明(解释器):第一行开头#!/bin/bash

2)注释信息:以#开头的语句表示为注释信息

3)可执行语句:比如echo命令用于输出“ ”之间的字符串

shell脚本应用场景

重复性操作

交互性任务

批量事务处理

定时任务执行

脚本的执行逻辑及执行方式:

1,顺序执行:程序从上到下执行

2,选择执行:程序执行过程中,根据条件不同选择不同分支继续执行

3,循环执行:程序执行过程中,需要重复执行多次重复语句

脚本错误

查代码的正确命令

bash -n 脚本名称(不在当前路径要是用绝对路径)

bash -x 脚本名称(不在当前路径要是用绝对路径)

1,一类命令错误,命令出错不会影响接下来的命令继续

2,语法错误

3,逻辑错误

三种脚本错误的区别

1,语法错误,会导致后续的命令不能继续,可以使用bash -n检查错误,提示的出错行数不一定正确

2,命令错误,默认后续的命令还会继续执行,可以使用bash -x进行观察

3,逻辑错误,只能用bash -x 进行观察

脚本的执行方式

./ 脚本 执行需要权限

 

 

我们接下来需要执行这个shell脚本,那我们需要赋予这个文件执行的权限x

 

 

 

 

 运行脚本的方法除了上图可以使用绝对路径或相对路径指定脚本的路径运行外还有以下几种方式:

指定shell程序来直接解释运行脚本 ./demo.sh #使用相对路径命令执行脚本文件(当前文件夹下的脚本文件执行) /User/demo.sh #使用绝对路径命令执行脚本文件(在根目录下的User目录中执行脚本文件) bash demo.sh #使用shell程序直接解释运行脚本 sh demo.sh #使用shell程序直接解释运行脚本

 

 

我们重新创建一个简单的shell脚本举例对比运行脚本命令的区别:

脚本内容如下图所示

 

 运行方式①:


 

 

 运行方式②:

2、重定向与管道操作

重定向和管道操作

交互式硬件设备

标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息

类型 设备文件 文件描述编号 默认设备
标准输出 /dev/stdout 0 键盘
标准输入 /dev/stdin 1 显示器
标准错误输出 /dev/stderr 2 显示器
         

重定向操作

类型 操作符 用途
重定向输入 < 从指定文件读取数据
重定向输出 > 将标准输出结果保存在指定文件并且覆盖原有内容
  >> 将标准输出结果追加到指定文件的尾部不覆盖原有内容
标准错误输出 2> 将错误结果保存在指定文件,并覆盖原有内容
  2>> 将错误信息追加到指定文件的尾部,不覆盖原有内容
混合输出 &> 将标准输出标准错误信息保存在用以文件
  2>&1 将标准输出信息重定向到标准输出
                     

PS:重定向输入要关闭SELinux即setenforce 0操作

2>&1 代表错误输出被重定向到标准输出当中,而标准输出会重定向到文件中,因此错误输出也重定向到文件中

举例: 重定向输入:

三、自定义变量

3.1如何定义变量

方法一:直接进行定义

格式:变量名=变量值

变量名一定要以字母或者下划线开头,区分大小写,建议全大写

 

 

 变量如何带有空格定义:

 举例:NAME='zhang san' #定义变量的变量值两边加上单引号或双引号才能生效 NAME=zhang san #不加引号,系统中会单独识别NAME=zhang这个变量定义,空格后的san将无法识别,导致定义失败  

 

 单引号双引号的使用区别:

 echo '$NAME' #此命令含义为将$NAME这串字符输出到屏幕上 $name echo "$NAME" #此命令含义为将"$NAME"这个name的变量名的变量值输出到屏幕上 zhang san

方法二:使用read命令

使用read命令可以获取标准输入的内容给变量,read命令有以下几种表现方式:

  1. read [变量名]

 

 2 read -p [变量名]

方法三:使用shell脚本实现

 

 配置上图完成后,我们验证一下结果:

 

 

 3.2 变量作用的范围

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再使用。

可以通过内部命令export将指定的变量为全局变量(即环境变量),使用户定义的变量在所有子shell环境中可以继续使用。

格式有如下两种:

  • export [变量名]
  • export [变量名]=[变量值]

局部变量举例:

我们先定义一个变量:

 

 命令查看我们现在所处的子shell环境:

 

 

如何将局部变量转换为全局变量?

 

 


 

标签:脚本,输出,Shell,命令,简述,shell,编写,执行,bash
From: https://www.cnblogs.com/jct166289/p/16825928.html

相关文章

  • 编写Golang程序以查找数组中每个元素的出现次数
    http://www.nhooo.com/note/qa5b2a.html解决这个问题的方法  步骤1: 定义一个接受数组的方法。步骤2: 定义一个映射,其中key将是数组的元素,起始值为0。步......
  • getopts 解析Shell脚本命令行参数
      getopts命令是用来解析Shell脚本命令行参数的工具    #!/bin/bashset-eset-x##Globalvariablesworkspace=$PWD/$(dirname$0)readonlyworkspac......
  • shell脚本之函数
    一、函数概念及格式1、函数的概念函数定义:封装的可重复利用的具有特定功能的代码函数就是可以在shell脚本当中做出一个类似自定义执行的命令的东西,最大的功能就是简化......
  • shell脚本之数组
    一、数组的概念数组中可以存放多个值。BashShell只支持一维数组(不支持多维数组)。与大部分编程语言类似,数组元素的下标由0开始。Shell数组用括号来表示,元素用"空格......
  • 使用Shell脚本安装MySQL
    使用Shell脚本安装MySQL......
  • 解决开机后三台虚拟机有一台虚拟机突然连不上xshell7
    1.问题详情简单描述:三台虚拟机IP:1.11、1.12、1.13除了1.11其余两台正常连接,并且在上次关机之前都能正常连接xshell7终端查看网卡:ifconfig未发现异常查看防......
  • Linux 纯shell备份文件
    克隆项目并进入项目目录:gitclonehttps://github.91chi.fun/https://github.com/Pricetx/backup.git;cdbackup创建所需目录:mkdir-p/root/backups/temp/添加......
  • shell中sort的用法
    练习文本catcargo.dbThinkPad:USA:14000:2009:X301ThinkPad:HongKong:10000:2008:T400ThinkPad:USA:8000:2007:X60HP:China:5600:2010:DM3HP:China:12000:2010:NE80......
  • 编写覆盖全面的测试用例
    在测试工作中,我们应该实事求是,接到需求后然后按如下几个方面来设计测试用例:1,分别设计不同类别的测试用例测试用例需要先区分类别,然后再进行设计。如冒烟测试用......
  • 类的编写模板之简单Java类
    简单Java类是初学java时的一个重要的类模型,一般由属性和getter.setter方法组成,该类不涉及复杂的逻辑运算,仅仅是作为数据的储存,同时该类一般都有明确的实物类型。如:定义一个......