首页 > 系统相关 >Shell编程自动化之Shell编程基础

Shell编程自动化之Shell编程基础

时间:2024-01-13 16:00:47浏览次数:20  
标签:脚本 文件 Shell 编程 命令 自动化 执行 输入

一、Shell可以用来做什么

1.自动化批量系统初始化程序;

2.自动化批量软件部署程序;

3.应用程序管理;

4.日志分析处理程序;

5.自动化备份恢复程序;

6.自动化信息采集及监控程序;

7.自动化管理程序;

二、Shell概述

1.Shell是操作系统的外壳,是用户操作系统的命令接口,是一个介于用户和系统内核之间的桥梁。Shell接受用户以命令方式输入的命令(包括系统提供的内部命令、独立存在于某个目录下的程序),也能解释执行由Shell命令编写的Shell程序。Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。

2023-04-13_Linux_Shell_01.png

2.Shell脚本就是将完成一个任务的所有的命令按照执行的先后程序,自上而下写入到一个文本文件中,然后给予执行权限。Shell语言编写的程序仅能在使用UNIX和Linux的计算机上使用。

3.Shell脚本中支持绝大多数编程语言中所能见到的程序控制结构,可以使用注释(“#”)对脚本的功能进行说明,可以使用条件测试表达式进行分支判断,可以使用循环语句处理大量数据,可以定义使用变量、数组等。Shell脚本也提供对函数的支持。Shell脚本是解释执行而不是编译执行。Shell编程的实质是连续自动执行一系列命令。

4.Shell是一个功能强大的计算环境,既可以将其作为命令解释器,也可以将其作为编程语言。Shell的功能主要包括以下几个方面。

接受来自键盘的命令;

  • 检查命令的正确性;
  • 命令错误则给出报错信息;
  • 命令正确则使用相应的系统调用执行命令(产生进程);
  • 命令执行完毕,给出命令执行的结果;

5.Shell脚本具有如下优点:

  • 一次性完成目标;
  • 不用重复键入一系列命令;
  • 简化用户的操作;

三、Shell基础知识

最常用的Shell包括Bourne Again Shell 、Bourne Shell、C Shell 、Korn Shell和Perl Shell等。下面均以流行的Bourne Again Shell 为例说明。Bourne Again Shell (简称Bash)是Linux默认的Shell,也是最流行的一种Shell,各个版本的UNIX和Linux几乎都支持Bash。UNIX、Linux都是区分大小写的,Shell脚本同样也是区分大小写的。

1.I/O重定向

在Linux系统中,数据流可分为3类:

  • 数据输入
  • 数据输出
  • 错误输出

标准输入通常是指传给一个命令的键盘输入。标准输出是一个命令的执行结果,通常标准输出被定向到显示器。可以利用管道把这些数据流之一输送给另外一条命令,也可以利用I/O重定向把这些数据流之一重定向到一个文件。管道和I/O重定向是Linux系统中特有的概念。所谓管道是指将某个命令的输出结果传送到另一个命令,当成另外一个命令的输入,其代表符号是“|”。所谓I/O重定向是指将命令执行结果重新导出到其他设备或文件(以“>”或“>>”来表示),或是重新导入到其他设备或文件(以“<”或“<<”来表示)。常用的输入输出重定向命令格式与执行结果如下图所示:

2023-04-13_Linux_Shell_02.png

管道符实例:

利用管道将"ls -al"命令的输出结果输入到more 或less命令,可以实现分页显示,命令如下:

`

#ls -al /etc | less

`

输出重定向实例:

1).以覆盖方式把正确输入和错误输入都保存在同一个文件中 命令 &> 文件

2).以追加方式把正确输入和错误输入都保存在同一个文件中 命令 &>> 文件

2023-04-13_Linux_Shell_03.png

3).以追加方式把正确输入保存在文件1中,把错误输入保存在文件2中 命令 >> 文件1 2>> 文件2

2023-04-13_Linux_Shell_04.png

2.Shell通配符

Shell中支持使用通配符,常用的通配符如下所示:

?:表示任意的单个字符;

*:表示任意长度的任意字符串;

[ ]:表示匹配放在[ ]中的字符集中的任意一个字符;

{ }:将大括号中的字符串以及前导字符串和后继字符串作为匹配条件;

3.单引号、双引号及反引号

Shell中使用三种引号:双引号、单引号和反引号。其中,双引号对字符串中出现的“$”、“""”、“`”和“\”进行替换;单引号不进行替换,将字符串作为普通字符串输出;反引号会将字符串作为命令执行,并返回执行的结果。其具体含义如下所示。

双引号(“ ”):在双引号中的字符,除了“$”、“""”、“`”和“\”以外的所有字符都被解释成字符本身。

单引号(' '):在单引号中的所有特殊字符(如“$”、“""”、“`”和“\”)都失去特殊意义,而成为普通字符。

反引号(` `):在反引号中的字符被解释成命令,例如,`cmd`会被解释成命令cmd执行的结果。

4.指定使用的Shell

Shell脚本文件的第一行通常会放置一行特殊的字符串,告诉操作系统使用哪个Shell来执行这个文件。

创建test.sh文件,输入下面内容:

#!/bin/bash

echo "hello world"

5.运行脚本

运行脚本有三种方法:

(1)、通过chmod命令把文件的权限设置成可读、可执行,然后直接执行该可执行文件,格式如下:

chmod u+x 脚本文件名    或  chmod 755 脚本文件名
./脚本文件名及其参数

(2)、直接使用Shell的启动命令来执行脚本。

bash 脚本文件名及其参数

(3)、使用bash内部命令“source”或“.”运行Shell脚本。

source 脚本文件名及其参数
或
. 脚本文件名及其参数

注:“.”和后面的程序名称之间要留有空格

bash实例如下:

2023-04-13_Linux_Shell_05.png

2023-04-13_Linux_Shell_06.png


标签:脚本,文件,Shell,编程,命令,自动化,执行,输入
From: https://blog.51cto.com/datutu/9232653

相关文章

  • 绕过安全限制,通过cmd执行PowerShell脚本(2)
    之前的做法是将PowerShell脚本的代码拼接成一个大字符串,然后通过在cmd中运行powershell去直接运行。现在觉得,多少有些脱裤子放屁。其实可以直接在cmd中设置脚本运行策略。改进后的脚本如下:首先是run.bat@echooffFOR/F"tokens=*USEBACKQ"%%FIN(`powershellGet......
  • 【LeetCode 2494. 合并在同一个大厅重叠的活动】MySQL用户变量编程解决区间合并问题
    题目地址https://leetcode.cn/problems/merge-overlapping-events-in-the-same-hall/代码#WriteyourMySQLquerystatementbelowwitht2as(select*#----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序执行的”-------------如果切换......
  • 【LeetCode1747. 应该被禁止的 Leetflex 账户】MySQL用户变量编程;尝试维护一个multise
    题目地址https://leetcode.cn/problems/leetflex-banned-accounts/description/代码witht1as(selectaccount_id,ip_address,loginastick,"login"asmytypefromLogInfounionallselectaccount_id,ip_address,logoutastick......
  • 《Java编程思想第四版》学习笔记53--关于UDP
    1、TCP和UDP端口是相互独立的。也就是说,可以在端口8080同时运行一个TCP和UDP服务程序,两者之间不会产生冲突。P.547//:Dgram.java//Autilityclasstoconvertbackandforth//BetweenStringsandDataGramPackets.importjava.net.*;publicclassDgram{publ......
  • MySQL一键安装Shell脚本的实现
    本文主要介绍了MySQL一键安装Shell脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧−目录一、脚本说明1、linux系统版本2、MySQL版本3、运行方式二、脚本内容一、脚本说明1、linux系统版本EL6,EL7,EL8,......
  • # yyds干货盘点 # 盘点一个Python自动化办公实战案例的问题
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas日期数据生成的问题,问题如下:大佬们,有个难度高的新需求,现实生活中也蛮实用的,原始数据和想要的结果是下面这样子,先进先出这样子的表现形式如下:当然商品不会只有一种,有办法吗?下面是他的原始代码:data=[......
  • Windows 10 中,可以使用 PowerShell 添加打印和文件服务的角色功能组件,包括 Internet
    在Windows10中,可以使用PowerShell添加打印和文件服务的角色功能组件,包括Internet打印客户端、LPD打印服务和LPR端口监视器。以下是添加这些功能组件的PowerShell命令:首先,以管理员身份打开PowerShell终端。在开始菜单中搜索"PowerShell",然后右键点击"WindowsPo......
  • 【LeetCode 2142. 每辆车的乘客人数 I】乘客到站等车,车到站载客。MySQL用户变量编程完
    题目地址https://leetcode.cn/problems/the-number-of-passengers-in-each-bus-i/description/思路将所有关键时刻作为tick。(同一时刻车和人同时到,默认人在车前到)之后按照tick升序,使用MySQL用户变量编程完成计算逻辑。输出结果。代码withticksas(selectarrival_tim......
  • 【教3妹学编程-算法题】统计出现过一次的公共字符串
    3妹:哈哈哈哈哈哈,太搞笑了~呵呵呵呵呵呵2哥:3妹干嘛呢,笑的这么魔性!3妹:在看王牌对王牌,老搞笑了2哥:这季好像没有贾玲吧。3妹:是啊,听说贾玲去导电影了,还狂瘦了100斤呢,哎,我也该减减肥了。2哥:切,你每隔几天就会说要减肥,也没见你减啊3妹:不吃饱哪有力气减肥,我每天还要刷题、找工作,多辛苦啊......
  • Python中有哪些常用的工具可以用于接口自动化
    接口自动化测试是测试的重要一部分,Python作为一种流行的编程语言,提供了许多用于接口自动化测试的工具。本文将介绍一些常用的Python工具,用于接口自动化测试。1.RequestsRequests是一个Python库,用于发送HTTP请求和处理响应。它提供了一种简单而优雅的方式来发送HTTP/1.1请求,并自动处......