Shell脚本入门

1.shell脚本的创建和执行

创建一个文件

 写一个shell脚本

 

 上面这种方法不常用,常用下面

所有可执行文件是绿色

绝对路径

 相对路径

 在该文件下运行.sh文件

 souce 要在该文件的文件夹下执行

. hello.sh和./hello.sh是完全不同的,点+空格是点命令

 2.变量

变量的划分一种可以分为系统变量用户自定义变量

一种可以分为全局变量(对于当前shell,在里面再启动一个子shell,子shell里可以再嵌套,迭代下去,所有的都是可见的),局部变量(只针对当前shell是可见的)

2.1系统预定义变量

查看当前home,查看当前所有的全局变量 

2.2自定义变量

 

注意:“a=2” 没有空格,shell直接解析成变量赋值表达式

 有空格,所以shell找不到

 输入bash,会进入到子bash里,这个新的子bash shell会继承父shell的环境变量,但是在子shell做的任何更改(例如更改环境变量)都不会影响到父shell。当在子shell中执行exit命令或者使用Ctrl+D退出时,会返回到父shell

进入子shell里找不到my_var,说明my_var是局部变量,通过这种方法定义的变量是局部

怎么定义全局变量?

先声明一个局部变量,在父dhell申明这个局部变量,就成全局

 更改只在子shell有效

在子shell申明的不会影响到父shell 

在脚本文件里(.sh)

 

 定义局部变量,写到脚本文件会不会输出?

如果./hello.sh不会输出该局部变量,输出空白(除非变成全局变量,export)

如果. hello.sh会输出,

自定义的变量名最好是小写,因为系统预定义的是大写,默认定义的数值是字符串。

只读变量的定义

撤销一个变量

只读变量不能unset 

2.3特殊变量

把hello.sh当命令执行

 但不建议这么做

 更好的方法:不改变bin目录,而且能把hello.sh当命令执行

$n变量

 只获取当前脚本名称,不带路径用basename

$#变量

 

 $*、$@ 变量

 $?变量

 3.运算符

1)基本语法

“$((运算式))”或“$[运算式]”

 转换:

反引号 shift+~   

 用调用的

4.条件判断

判断a的值是不是hello,是真返回0,假返回1

$a = hello  等号两边一定要用空格隔开

 不等号 $a != hello

整数判断

 

多条件组合判断 

&& 表示前一条命令执行成功时,才执行后一条命令;||表示上一条命令执行失败后,才执行下一条命令

[ $ a -lt  20 ]为真,就运行 echo “$a < 20”, [ $ a -lt  20 ]为假,就运行 echo "$a >= 20"

[ ]有内容为真,无内容为假的。

5.流程控制(重点)

5.1if判断

分号;:将两个命令隔开

1)单分支(逻辑为真,执行这段代码,为假,则跳过这段逻辑)

-gt是大于

用shell脚本跑

 期待一元表达式的解决方法:

报错是因为a没有被赋值,(ps:断开连接后之前定义的局部变量就没有了?)

 想要把条件写在一起, -a逻辑与(and)&&,-o(or)逻辑或||

 2)双分支(条件为真是一边,为假是一边)

 3)多分支

5.2case语句

 

5.3for循环

从1加到输入的数

上面那个报错原因,头少写一个斜杠,for里面是分号隔开,我用错成,

为什么这里可以用"<=",这里用了(()),所以可以 

 

 {}:表示一个序列

 

 要用引号吧  引起来“$*”  “$@”

5.4while循环

 # 更人性化写法

6.read读取控制台输入

 7.函数

调用系统命令的时候要用$(系统命令) ,达到一种命令替换的状态

 7.1系统函数

1)basename

basename只保留最后一个斜杠的内容,本质就是字符串的剪切

 用了basename后的parameter

得到的是当前脚本名称,而且不带后缀

2)dirname

 7.2自定义函数

 有返回值的

报错

 正确的

return直接给$s的话,只能返回0~255的值,how to solve?

 8.综合应用案例

归档文件

 

 重要数据的归档

9.正则表达式入门

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Limnux中,grep,sed,awk等文本处理工具都支持通过正则表达式进行模式匹配。

9.1常规匹配

9.2常用特殊字符

筛选以a开头的所有 ^a

 筛选以bash结尾的所有 bash$

只有^$,匹配空行

^atbash$表示以at开头以bash结束的文件,

显示所有空行并显示行号

 找到以r隔俩字符以t结尾的r..t

*某一个字符出现任意次

".* "任意字符出现任意次

以a开头,以bash结尾的所有

 

 

筛选手机号码

grep不支持和{}一起用,得要用-E

10.文本处理工具

10.1cut(在文件中负责剪切数据)

截取第一列

截取第2,3列

截取1,6,7列

分别为,截取1-4列,截取后四列,截取前四列

截取ip地址

 10.2 awk

 1)搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第7列。

F1:先grep行的提取,再cut列的提取

2)搜索 passwd 文件以root 关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。

3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名 user shell 在最后一行添加"dahaige,/bin/zuishuai"。 

注意:BEGIN 在所有数据读取行之前执行;END在所有数据执行之后执行。←

 4)将 passwd 文件中的用户id 增加数值1并输出

F2

 awk的内置变量

 3)切割IP

11.综合案例 

发送消息

我们可以利用 Limux 自带的 mesg 和 write 工具,向其它用户发送消息。
需求:实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直接跟要发送的消息。脚本需要检测用户是否登录在系统中、是否打开消息功能,以及当前发送消息是否为空。

 who -T可以查看是否可以接收消息,有+表示可以接受

给david发送消息 write david pts/1 要写清楚给哪个david发

david收

 脚本实现

 

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

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

相关文章

IT部门都想要的跨网文件交换解决方案,了解一下

近年来全球网络安全威胁态势的加速严峻&#xff0c;使得企业对于网络安全有了前所未有的关注高度&#xff0c;企业的网络安全体系建设正从“以合规为导向”转变到“以风险为导向”&#xff0c;从原来的“保护安全边界”转换到“保护核心数据资产”的思路上来。 为了保护企业的核…

EPSON的实时时钟模块RX8010SJ丰富的定时功能及超低功耗特性

温控器是用于控制温度的设备&#xff0c;目前市面上的温控器用于控制地暖空调、热水器、中央新风系统等设备。随着智能家居理念深入人心&#xff0c;人们也期望温控器不仅能控得"准”&#xff0c;还能控得“智能”。为了实现智能控制&#xff0c;温控器一般需要实时时钟模…

【随笔】Git -- 基本概念和使用方式(五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

GIS、CAD数据为基础进行城市排水系统水力建模方法

佳文推荐 城市内涝水文水动力模型介绍 在城市排水防涝规划过程中&#xff0c;水文水动力耦合模型已经成为一种不可或缺的分析工具。在模型建立、城市内涝风险评估、排水系统性能诊断以及海绵城市规划等方面&#xff0c;内涝耦合模型提供了相应的模拟及分析工具&#xff1a; …

【Rust】——提取函数消除重复代码和泛型

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

前端请求的有几种方法

vue前端请求api的有几种方法 使用 XMLHttpRequest (原生方式)&#xff1a;使用 Fetch API&#xff1a;使用 Axios&#xff1a;使用 Vue Resource&#xff1a;使用其他第三方库&#xff1a;Vue 自身配合生命周期钩子&#xff1a; unfetch插件和 fetch有什么区别&#xff1f;vue2…

C语言:编译与链接

目录 前言1. 翻译环境与运行环境2.翻译环境&#xff1a;预编译编译汇编链接3. 运行环境 前言 我们写一个程序&#xff0c;例如test.c或是test.h这些源文件&#xff0c;头文件&#xff0c;事实上这些代码都是文本文件&#xff0c;但是计算机能够看得懂&#xff0c;并且直接执行…

电路笔记 :灯光画 元器件焊接+连锡处理

https://oshwhub.com/qazwsx1987/dengguanghua_0#P3 基础工具 常用的电路焊接工具&#xff1a; 工具描述电烙铁我买了一个便携电烙铁&#xff0c;但是烙铁头温度太低&#xff0c;焊锡总是粘在烙铁头上&#xff08;因为电量不足&#xff09;, 打火机秒变电烙铁焊台用于支撑工…

3分钟教你弄懂【01背包问题】

背包问题 介绍 将有限物品按找最大价值装进有限体积的背包中去 核心步骤 1.确定状态表示 2.确定边界和遍历顺序 3.找到状态转移方程 先上 Coding #include <iostream> using namespace std;const int N 300; int itemSize[N]; //每件物品的大小&#xff08;体积…

《仙剑7》登陆Xbox主机平台年末大作空窗期

首发一年后&#xff0c;《仙剑奇侠传7》终于登陆Xbox主机平台&#xff0c;而这也恰逢Xbox平台年末大作的窗口期。 随着年底大作的稀缺&#xff0c;以及海外3A RPG《星空》的延期&#xff0c;2022年底的这段时间给Xbox玩家体验《刀剑7》留下了一段空白。 可以说是因祸得福。 《仙…

详解Python内建函数map()和reduce()

Python内建了map()和reduce()函数。 我们先看map。map()函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是Iterable&#xff0c;map将传入的函数依次作用到序列的每个元素&#xff0c;并把结果作为新的Iterator返回。 现在&#xff0c;我们用Python代码实现&#xf…

【C语言】结构体详解

文章目录 1、前言2、结构体变量的创建和初始3、结构体的特殊声明3、结构体的自引用5、结构体的内存对齐5.1 对齐规则5.2 为什么存在内存对齐?5.3 修改对齐数 6、结构体实现位段6.1 什么是位段6.2 位段的内存分配6.3 位段的跨平台问题6.4 位段的应用6.5 位段使用的注意事项 7、…

春耕农业气象环境监测站来帮忙

春耕春种&#xff0c;是大地苏醒的序曲&#xff0c;是生机盎然的交响乐章。在这播种希望、耕耘未来的美好时节&#xff0c;{鸣乔电子科技}农业气象环境监测站犹如一位贴心的助手&#xff0c;为农业生产保驾护航。 随着科技的进步&#xff0c;农业气象环境监测站不再是简单的温…

前端必会的一些基础

1、如何把obj对象 添加到arr数组对象内 2、手机号、邮箱、隐藏用户手机号中间四位正则 3、两个数组 数组a未全部人员 数组b为已选中人员 默认选中 4、数组去重、 5、localStorage 存取 数组 方法 6、数据filter过滤 7、请求接口时header 请求格式不对 需要怎么转换&#xf…

电脑桌面便签软件,好用的电脑桌面便签工具

在数字化时代&#xff0c;我们的工作效率在很大程度上依赖于所选工具的优劣。优秀的工具能助力我们事半功倍&#xff0c;而低效的工具则可能导致我们陷入冗杂操作&#xff0c;白白耗费大量时间。在此&#xff0c;我要向大家推荐一款极为出色的电脑桌面便签软件--好用便签。 好…

java.lang.RuntimeException: java.lang.IllegalArgumentException

填上红框内容&#xff0c;亲测可行 报错如下&#xff1a; java: java.lang.IllegalArgumentException java.lang.RuntimeException: java.lang.IllegalArgumentExceptionat com.sun.tools.javac.main.Main.compile(Main.java:553)at com.sun.tools.javac.api.JavacTaskImpl.do…

【EPLAN】授权-MAX100.17问题解决

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决EPLAN 客户端授权连接时出现-MAX100.17 报错问题&#xff1b; 2、 问题场景 用于解决在EPLAN 客户端授权连接时&#xff0c;出现-MAX100.17 报错&#xff1a;无法建立与EPLAN Client Service[MAX 100.17] 的连…

【MATLAB源码-第9期】基于matlab的DQPSK的误码率BER和误符号率SER仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 DQPSK信号的解调与2DPSK信号的解调类似&#xff0c;也有两种方法&#xff0c;分别是极性比较法和相位比较法 极性比较法。其原理方框图如下图所示。由于DQPSK信号可以看做是两路2DPSK信号的合成&#xff0c;解 调时也可以分别…

Python:基础语法

一、import与from.....import 有时候我们需要使用一些第三方库或包时&#xff0c;我们就需要通过import或from.....import导入模块。 # 导入库 import sys print("hello,world") 当我们自己写了些函数&#xff0c;在其他py文件&#xff0c;我们也可以通过from.....im…

Anaconda配置系统环境

首先&#xff0c;右键此电脑&#xff0c;点击属性 点击高级系统设计 点击环境变量 点击环境变量中系统环境下的Path&#xff0c;双击 如下图&#xff0c;添加这四项即可&#xff0c;注意&#xff0c;这都是Anaconda的安装目录下的内容 在windowsR的cmd情况下&#xff0c;输入co…