初识shell脚本

目录

什么是shell脚本

面向过程语言

面向对象   windows

三种处理逻辑

常用的:usr/bin/bash

基本申明

三个基本语法

执行脚本

脚本错误

三种错误区别

set -e

set -u 

重定向

管道符

变量

常见的shell变量的类型包括

整数的运算

整数运算

 $RANDOM 随机数  %取余(膜)

环境变量

只读变量

位置变量

预定(状态)变量

$*:表示所有位置参数的内容看成一个整体返回 返回所有

$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有

$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常

$#:表示命令行中位置参数的总个数

$0:表示当前执行的脚本或程序的名称 当前脚本的名字

$$:当前bash的进程id

$!: 后台任务最后一个id


什么是shell脚本

Shell脚本是一种利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能。Shell脚本类似于早期DOS时代的批处理文件(.bat),最简单的功能就是将许多命令集合写在一起,让用户很轻易地就能够用one touch的方法去处理复杂的操作(执行一个文件“shell脚本”,就能够依次执行多个命令)。

面向过程语言

需要一步一步执行,以指令为中心,数据服务于指令

面向对象   windows

开发的时候将任务当成一个整体

shell是命令解释器  bash

shell 将人类高级语言翻译成二进制,也可以二进制翻译成高级语言

人类的命令集合,然后用bash(shell)去翻译,给硬件执行

三种处理逻辑

顺序执行:程序按从上到下顺序执行

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

循环执行:程序执行过程中需要重复执行多次某段语句(已知次数 已知条件 死循环)

常用的:usr/bin/bash

基本申明

#!/bin/bash   申明
#  申明解释器  代表我接下来,使用什么解释器
#  注释意思

三个基本语法

1.申明解释器

2.注释信息

3.执行命令

执行脚本

1.直接使用shell解释器加上脚本名(bash 脚本名 不需要加权)

[root@localhost ~]# bash 12
请输入第一个数:4
请输入第二个数:3
7

2.路径/脚本 (绝对路径 )脚本名后面加    .sh shell语法高亮 (需要权限  +x执行权限)

[root@localhost ~]# ./12
-bash: ./12: 权限不够

3.source(.)加脚本名字 (不需要权限)  (不推荐 sourece会直接修改当前bash的shell环境)

[root@localhost ~]# . 12
请输入第一个数:2
请输入第二个数:3
5

4.如果你想让脚本全局运行,将脚本放入$PATH路径下并且脚本有执行权限

[root@localhost ~]# $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: 没有那个文件或目录

脚本错误

1.命令错误  不会影响接下来的命令,但会影响本条命令

2.语法错误  直接影响脚本无法正常运行

3.逻辑错误  在Shell脚本中,逻辑错误可能会导致脚本无法正确地执行预期的操作,甚至可能产生错误的结果

三种错误区别

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

2.命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察

3.逻辑错误:只能使用 bash -x 进行

set -e

 在脚本的前面输入 set -e  一旦出错立刻停止

[root@localhost ~]# vim 1
[root@localhost ~]# bash 1
1: 第 4 行:cd: /et: 没有那个文件或目录
[root@localhost ~]# 

set -u 

变量不存在不让执行

[root@localhost ~]# vim q
[root@localhost ~]# bash q
q:行5: ba: 为绑定变量
[root@localhost ~]# 

重定向

重定向:改变电脑数据输出的方向

默认:电脑数据的输出方向是屏幕

标准输出:你发了一条指令给电脑操作,电脑回复你,结果一定是显示在屏幕上,我们称为标准输出(标准输入通过键盘,鼠标,扫描仪,话题给电脑称为标准输入)

错误输出:如果电脑没有正确的回复你称为错误输出

管道符

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

   (将第一个命令结果,当做后一个命令的处理对象)

变量

在Linux中,变量是一种可改变的量,通常由字母和数字组成,且开头不能为数字

1.整数   变量名=变量值   (两边无空格)

2.字符   调用变量  echo  $变量名

             删除变量  unset  变量名

             重新定义变量  变量名=变量值

             追加变量    变量名+ =变量值

常见的shell变量的类型包括

自定义变量:由用户自己定义,修改和使用

预定义变量:Bash中内置的一类变量    shell           不能修改    规定好的变量 放在那里让你使用

环境变量:由系统维护,用于设置工作环境      当前目录  当前主机名啊   $PATH

只读变量:只可以读取不可以更改              只能不能修改    常量

位置变量:通过命令行给脚本传递参数

整数的运算

expr只能进行整数的运算

格式: expr 变量1 运算符 变量2 [运算符 变量3]

运算符:

加法 +

减法 -

乘法 \ *

除法 /

取余 (取模)%

整数运算

[root@localhost opt]# vim qqq.sh   read -p "请输入第一个数:" q
read -p "请输入第二个数:" w
read -p "请输入第三个数:" eexpr $q \* $w +  $e[root@localhost opt]# bash qqq.sh   
请输入第一个数:3
请输入第二个数:2
请输入第三个数:1   // 3*2+1
7

 $RANDOM 随机数  %取余(膜)

环境变量

由系统提前创建,用来设置用户的工作环境

可以使用env查看环境变量

需要记住的常用环境变量

env  可以看到所有

[root@localhost opt]# env
XDG_SESSION_ID=150
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.17.29 51174 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/2
USER=root    
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/opt
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
SSH_CONNECTION=192.168.17.29 51174 192.168.17.55 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
DISPLAY=localhost:11.0
_=/usr/bin/env
OLDPWD=/root

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径

环境变量:

可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

一般只在系统配置文件中使用,在脚本中较少使用

只读变量

变量值不允许修改(重新赋值)的情况

法使用 unset删除

最快方法重启

readonly name  是一个只读属性,表示该属性只能在声明时或构造函数中被初始化,并且之后不能被修改

[root@localhost ~]# name=ky33
[root@localhost ~]# readonly name  //readonly name是一个只读属性,表示该属性只能在声明时或构造函数中被初始化,并且之后不能被修改[root@localhost ~]# echo $name
ky33
[root@localhost ~]# unset name
-bash: unset: name: 无法反设定: 只读 variable
[root@localhost ~]# echo $name
ky33
[root@localhost ~]# name=www
-bash: name: 只读变量

位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

[root@localhost~]# vim 1.sh      
#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数
[root@localhost~]# ./1.sh {1..10}
1 
2
10
10
1 2 3 4 5 6 7 8 9 10

预定(状态)变量

bash 帮你定义好了 拿来用就可以了

$*:表示所有位置参数的内容看成一个整体返回 返回所有

$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有

$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常

$#:表示命令行中位置参数的总个数

$0:表示当前执行的脚本或程序的名称 当前脚本的名字

$$:当前bash的进程id

$!: 后台任务最后一个id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/200027.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

来吧,SpringBoot的自动配置原理都在这里了

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

Enterprise Architect安装与使用

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方网站:https://www.sparxsystems.cn/products/ea/;图示如下: Enterprise Architect是一个全功能的、基于…

webpack 中,filename 和 chunkFilename 的区别

filename filename 是一个很常见的配置,就是对应于 entry 里面的输入文件,经过webpack打包后输出文件的文件名。比如说经过下面的配置,生成出来的文件名为 index.min.js。 chunkFilename chunkFilename 指未被列在 entry 中,却…

单图像3D重建AI算法综述【2023】

计算机视觉是人工智能的一个快速发展的领域,特别是在 3D 领域。 本概述将考虑一个应用任务:2D 和 3D 环境之间的转换。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编…

C语言入门笔记—static、extern、define、指针、结构体

一、static static修饰局部变量的时候,局部变量出了作用域,不销毁。本质上,static修饰局部变量的时候,改变了变量的存储位置。详见下图,当a不被static修饰和被static修饰的时候。 C/C static关键字详解&#xff…

Spring Cloud学习(九)【Elasticsearch 分布式搜索引擎01】

文章目录 初识 elasticsearch了解 ES倒排索引ES 的一些概念安装es、kibana安装elasticsearch部署kibana 分词器安装IK分词器ik分词器-拓展词库 索引库操作mapping 映射属性索引库的 CRUD 文档操作添加文档查看、删除文档修改文档Dynamic Mapping RestClient 操作索引库什么是Re…

【Spring Boot】使用WebSocket协议完成来单提醒及客户催单功能

1 WebSocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 1.1 HTTP协议和WebSocket协议对比 1、HTTP是短…

redis五大常见数据结构的操作命令(string, hash, list, set和zset)

string redis的string,直接按照二进制(不做任何的转换,存的是什么取出来的依旧是什么)的方式存储。所以string不仅仅可以存储文本数据,还可以存储整数,JSON,xml甚至音视频。但是string的大小最…

谷歌浏览器任意文件访问漏洞(CVE-2023-4357)复现

1.漏洞级别 高危 2.漏洞描述 该漏洞的存在是由于 Google Chrome中未充分验证 XML 中不受信任的输入。远程攻击者可利用该漏洞通过构建的 HTML 页面绕过文件访问限制&#xff0c;导致chrome任意文件读取。 总结&#xff1a;一个XXE漏洞 3.利用范围 Google Chrome < 116.…

【计算机网络笔记】网络地址转换(NAT)

系列文章目录 系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08…

JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素

例如&#xff0c;下面这段请求的xml代码&#xff0c;在元素body下面又多了一层&#xff0c;嵌套了4个元素&#xff1a; <?xml version"1.0" encoding"UTF-8"?><request><reqtype>04</reqtype><secret>test</secret>…

​软考-高级-系统架构设计师教程(清华第2版)【第10章 软件架构的演化和维护(P345~382)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第10章 软件架构的演化和维护&#xff08;P345~382&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

细节决定成败——我的日志去哪了?

概述 编写本文档的目的有两点。 本周遇到了一个日志丢失的问题&#xff0c;经过分析&#xff0c;觉得挺有意思的。向大家分享一下我的分析及解决思路。应该在很多项目中都会有该问题。领导和我私下讨论过多次&#xff0c;当前的autodomain代码对文件读取的频率太高了,如何去避…

数学建模-图与网络模型解题方法和代码实现

本文针对以下几个方面问题进行整理&#xff1a; 最短路问题 两个指定顶点之间的最短路径任意顶点之间的最短路径 2.最小生成树问题 求最小生成树 3.网络最大流问题 源点与汇点之间的最大流基于最大流的最小费用求解 4.旅行商问题 基于哈密顿(Hamilton)圈求解旅行商线性…

基于Qt QList和QMap容器类示例

## QList<T> QList<T>容器是一个数组列表,特点如下: 1.大多数情况下可以用QList。像prepend()、append()和insert()这种操作,通常QList比QVector快的多。这是因为QList是基于index标签存储它的元素项在内存中(虽然内存不连续,这点与STL的list 是一样的),比…

网络连接Android设备

参考&#xff1a;https://blog.csdn.net/qq_37858386/article/details/123755700 二、网络adb调试开启步骤 1、把Android平板或者手机WiFi连接到跟PC机子同一个网段的网络&#xff0c;在设置-系统-关于-状态 下面查看设备IP,然后查看PC是否可以ping通手机的设备的IP。 2、先…

深度学习人脸表情识别算法 - opencv python 机器视觉 计算机竞赛

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

口袋参谋:找关键词的三种方法!

​如何找热搜关键词&#xff1f;99%的商家都不知道。那么今天可以根据我说的三种方法去做。 第一种方法&#xff1a;利用竞争对手 通过分析竞争对手&#xff0c;正在使用和采取何种优化方法&#xff0c;来帮助你理解市场上正在流行什么样的关键字&#xff0c;这些热词可以直接从…

美国DDoS服务器:如何保护你的网站免遭攻击?

​  在当今数字化时代&#xff0c;互联网已经成为人们生活中不可或缺的一部分。随着互联网的普及和发展&#xff0c;网络安全问题也日益严重。其中&#xff0c;DDoS攻击是目前最常见和具有破坏性的网络攻击之一。那么&#xff0c;如何保护你的网站免遭DDoS攻击呢?下面将介绍…

自动化物流运输设备模组要选择哪种类型?

在自动化物流运输设备中&#xff0c;选择合适的模组类型取决于具体的运输需求和应用场景。 1、同步带模组&#xff1a;同步带模组是一种低噪音、低成本的物流运输设备&#xff0c;适用于中短距离、轻型货物的运输。它采用同步带传动的方式&#xff0c;具有传动准确、运行稳定、…