首页 > 系统相关 >Shell脚本

Shell脚本

时间:2024-06-30 23:21:35浏览次数:1  
标签:脚本 输出 Shell 变量 3.3 执行

Shell脚本

目录

一、Shell脚本的概述

1、Shell脚本的概念

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

2、Shell脚本的应用场景

重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行

3、Shell脚本的作用

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

查看本机的shells

image-20240509110850384

二、Shell编程规范

1、编写脚本代码

  • 使用vi或者vim编辑器,一般都是使用vim编辑器
  • 每行一条Linux命令,按执行顺序一次编写

2、shell脚本的构成

  • 脚本申明(解释器) :若第一行为“#!/bin/bash", 表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/ expect
  • 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。(shell脚本文件的第一行是个例外,#后面的感叹号会告诉shell用哪个shell来运行脚本)
  • 可执行语句:比如echo命令,用于输出" "之间的字符串。

3、执行脚本的方式:

3.1使用指定的shell解释器:(不需要脚本有执行权限)

会重新加载一个子bash环境去执行,不会影响当前bash环境变量值,常使用。

image-20240510141029889

3.2 路径的方式:

会不影响当前bash环境变量值,不常使用

image-20240510142735374

image-20240510142615771

3.3使用source和“.”执行脚本:这种一般不常用

会在当前bash环境运行脚本,会修改当前bash环境,建议小白不使用即可;

image-20240510144555702

4、脚本错误调试

4.1命令错误

4.2语法错误

4.3逻辑错误

为了防止错误的脚本带来不可估量的后果:

第一,在执行脚本之前使用“bash -n 脚本”进行语法检查,或者在测试机器上先进行调试检测

第二,在脚本中建议加上set -e(遇到错误的命令即终止,不再往下执行)

第三,在脚本中建议加上set -u(遇到变量赋值不正确,即终止

三、重定向与管道符

1、交互式硬件设备

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

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

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

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

2、重定向的操作

类型 操作符 用途
重定向输入 < 从指定的文件读取数据,而不是从键盘输入
重定向输出 > 将输出结果保存到指定的文件(覆盖原有的内容)
>> 将输出结果追加到指定的文件尾部
标准错误输出 2> 将错误信息保存到指定的文件(覆盖原有的内容)
2>> 将错误信息追加到指定的文件中
混合输出 &> 将标准输出、标准错误的内容保存到同一个文件中
2>&1 将标准错误输出重定向到标准输出

注意:这里的2和1是设备符号,系统规定不能更改

3、实例

3.1重定向输入

image-20240510152221758

3.2 重定向输出

image-20240510152419533

3.2.1 覆盖( > )

image-20240510152503667

3.2.2 追加(>)

image-20240510152549011

3.3 重定向标准错误输出覆盖和追加

image-20240510153330343

3.4 面试题

#下面哪一项不能将正确和错误一起显示出来 
A:[root@centos7 ~]#ls /data /xxx 1> /data/all.log 2>&1
B:[root@centos7 ~]#ls /data /xxx 2> /data/all.log 1>&2 
C:[root@centos7 ~]#ls /data /xxx &> /data/all.log  
D:[root@centos7 ~]#ls /data /xxx >& /data/all.log  
E:[root@centos7 ~]#ls /data /xxx   2>&1 1> /data/all.log

A:

image-20240510160353290

B:

image-20240510160524493

C:

image-20240510160623127

D:

image-20240510160718077

E:(错误)

image-20240510160959364

四、shell变量的作用、类型

1、变量的作用

  • 用来存放系统和用户需要使用的特定参数(值)
  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

2、变量的类型

  • 自定义变量:由用户自己定义、修改和使用(注意命名要求)
  • 特殊变量:环境变量、只读变量、位置变量、预定义变量
  • 环境变量: 由系统维护,用于设置工作环境
  • 位置变量: 通过命令行给脚本程序传递参数
  • 预定义变量: Bash中内置的一类变量,不能直接修改

3、自定义变量

3.1 定义一个新的变量

变量名以字母或下划线开头,区分大小写,建议全大写,不能使用程序中的保留变量名称

变量名=变量值

3.2 查看变量的值

echo $变量名

image-20240510162407795

3.3 特殊符号学习

3.3.1花括号:表示定义变量的范围

image-20240510162926082

3.3.2双引号:表示弱引用,可以调用变量的值
3.3.3单引号:表示强引用,表示调用单引号内容本身

image-20240510163259164

3.3.4反撇号(反引号)

image-20240510164014556

五、整数运算

1、let

image-20240510172925960

2、变量1=expr 变量2 运算符 变量3

image-20240510173130660

3、产生随机数(random%数字) 产生的结果=[0,这个数字减一的结果]

image-20240510173526278

4、变量1=$[变量2运算符变量3]

image-20240513144746716

5、变量1=$((变量2运算符变量3))

image-20240513145055345

六、变量的类型

1、环境变量

image-20240513150343637

2、预定义变量

2.1、$? 返回上一次的执行结果,0是正确,其他是错误

image-20240513150528472

2.2、$$:输出当前bash的pid号

image-20240513151149044

2.3、$0:便是脚本的名称 $1:第一个参数....

image-20240513151934882

2.4 $#表示位置参数的总个数

image-20240513152413476

2.5$@:返回所有的参数,将参数逐个返回

2.6$*:返回所有的参数,把参数当成一个整体一起返回

2.7$!:返回上一次执行的进程pid号

4、只读变量

image-20240513152755116

标签:脚本,输出,Shell,变量,3.3,执行
From: https://www.cnblogs.com/shijunan2/p/18277142

相关文章

  • 【JavaScript脚本宇宙】打造完美用户体验:必备JS图形库指南
    探索顶尖JavaScript图形库:从jsPlumb到mxGraph前言在现代的Web开发中,交互式图形和数据可视化库成为了不可或缺的工具。这些库不仅提供了丰富的功能,还大大简化了开发人员的工作流程。本文将介绍和比较六个流行的JavaScript图形和数据可视化库:jsPlumb、GoJS、draw2d、Cytosca......
  • 【JavaScript脚本宇宙】加速您的网站:图像优化工具和库的终极指南
    别让大图拖垮你的应用:如何正确优化图像前言在数字时代,图像是我们日常生活中不可或缺的一部分。然而,随着图像数量的增加和分辨率的提高,它们也占据了越来越多的存储空间和带宽。为了解决这个问题,开发人员可以使用各种图像优化工具和技术来减小图像文件的大小,同时保持其质量......
  • 【JavaScript脚本宇宙】精通前端开发:六大热门CSS框架详解
    前端开发的利器:深入了解六大CSS框架前言在现代Web开发中,选择适合的前端框架和工具包是构建高效、响应式和美观的网站或应用程序的关键。本文将详细介绍六个广受欢迎的CSS框架:Bootstrap、Bulma、TailwindCSS、Foundation、Materialize和SemanticUI。每个框架都有其独特的......
  • Django 笔记 - Django Shell
    启动DjangoShell交互式界面,具体命令如下:pythonmanage.pyshell具体实例实例1.直接修改用户密码,无需原密码。在DjangoShell交互式界面下,修改admin用户密码的具体代码如下:fromdjango.contrib.auth.modelsimportUseruser=User.objects.get(username='admin'......
  • shell字符串截取
    假设有变量var=http://www.aaa.com/123.htm.1.#号截取,删除左边字符,保留右边字符。[root@ansible01~]#var=http://www.aaa.com/123.htm.[root@ansible01~]#echo${var#*//}www.aaa.com/123.htm. 其中var是变量名,#号是运算符,*//表示从左边开始删除第一个//......
  • 【JavaScript脚本宇宙】浏览器中的文件系统:深入了解最受欢迎的JavaScript库
    超越传统存储:探索创新的浏览器文件系统解决方案前言在现代的网页开发中,文件系统和文件操作是不可或缺的一部分。无论是上传图片、下载文档还是在浏览器中保存离线数据,我们都需要与文件系统进行交互。为了简化这些任务并提供更好的用户体验,有许多JavaScript库被开发出来,以......
  • 终端交互脚本
    终端交互命令行脚本简述基于nodejs环境编写的交互式命令行脚本,使用到的npm包主要有以下三个execa:执行脚本命令inquirer(核心包):用于在终端中进行提问与回答的交互操作detect-port:用于检测端口是否被占用包使用详细介绍execa安装[email protected]使用import{e......
  • shell数组
    shell数组文章目录shell数组数组数组遍历冒泡排序数组定义:在集合中指定多个元素:元素的类型:整数。字符串,可以是浮点作用:一次性的定义多个元素,可以为变量赋值提供便利。数组的定义方法数组名不能重复数组名=(abcd)echo${数组名[*或@]}数组内部的元素值是从......
  • 如何使用JMeter 中beanshell sample实现 POST 请求并处理响应
    如何使用JMeter中beanshellsample实现POST请求并处理响应在JMeter的性能测试中,可以通过Java代码来实现复杂的POST请求并处理响应。以下是一个详细的示例代码解析:importjava.io.OutputStreamWriter;importjava.io.InputStreamReader;importjava.io.BufferedReade......
  • 【openGauss、PostgreSQL】openGauss、PostgreSQL数据库通用查表字段信息脚本-v202406
    【openGauss、PostgreSQL】openGauss、PostgreSQL数据库通用查表字段信息脚本-v20240620-2216openGauss、PostgreSQL数据库通用查表字段信息脚本-v20240620-2216openGauss、PostgreSQL数据库通用查表字段信息脚本-v20240620-2216此脚本,openGauss、PostgreSQL都可执......