Linux中的shell脚本

什么是shell脚本

  • shell脚本是文本的一种
  • shell脚本是可以运行的文本
  • shell脚本的内容是由逻辑和数据组成
  • shell脚本是解释型语言

用file命令可以查看文件是否是一个脚本文件

file filename

脚本书写规范

注释

单行注释

使用#号来进行单行注释

多行注释

使用

: "

注释内容

注释内容

注释内容

"

注意:冒号后面有空格

注意

在.vimrc里面注释行时
用的是"

vim用于书写脚本的设定

ts:tab键的大小

sw:缩进大小

ai:自动缩进

et:将tab键补齐的大空格拆分成小空格

注:当你规定了tab键的大小时,再规定sw的缩进大小将不生效

用vim编辑这个配置文件 

vim ~/.vimrc

自动添加新创建的特定文件的预定内容

也是编写这个配置文件

vim ~/.vimrc

如下代码块

 第一行的意思是当新创建一个以.sh或.script时自动执行下面我们自己写的一个SHELLTITLE函数

其中函数中写的是

在第1行(linux中行数从0开始计算,所以代码中写的是0而不是1)添加上“hahahahahahahahaha”这行内容

在第2行添加上日期,其格式为年/月/日

autocmd BufNewFile *.sh,*.script call SHELLTITLE()
func SHELLTITLE()call append(0,"hahahahahahahahaha")call append(1,"# Date:             ".strftime("%Y/%m/%d"))
endfunc

检验效果

以.sh结尾的新文件会自动添加

以.script结尾的新文件

也会自动添加

如果不是以.sh或.script结尾的新文件
也是不会自动添加的

脚本执行方法

创建了一个新脚本文件

里面编写的内容

注:没有可执行权限

在没有可执行权限时

. 脚本

. 脚本

source 脚本

source 脚本

sh 脚本

sh 脚本

 

当有可执行权限时

./脚本

./脚本

 

直接执行脚本的绝对路径

脚本的绝对路径

脚本调试

写一个手残脚本

其中cat处本应该是cal

运行手残脚本

会发现被卡住了

假装排查代码眼残也没发现问题哈哈哈哈

那么我们就可以用sh -x 来执行脚本

调试脚本

sh -x 脚本

这次可以清楚的看到卡在了哪一步 

这样对我们的脚本排错有很大的作用

然后我们改一下我们的脚本

脚本在指定环境中运行

.        脚本

source        脚本

直接执行脚本的绝对路径 会直接新开bash来执行脚本

exit值

查看退出值

echo $?

退出值0为正常退出,非0值都是错误退出,不正常。

修改退出值

exit 你想要的退出值

打印文本

cat&tac

正向打印&反向打印

seq

注:只能打数字

seq 1 3
#打印1到3
seq 2 2 10
#打印2到10 步长为2
seq 1 2 10
#打印1到10 步长为2

echo

echo 123
echo "hello world"echo -n "hello world" //不换行打印echo -e "hello\tworld" //解析转义字符

printf

printf "hello vb" //不换行打印
printf "hello vb\n" //换行打印printf "3%%" //打印百分号printf "%0.1f" "3.141592653579"    //保留一位小数
printf "%0.2f" "3.141592653579"    //保留两位小数
printf "%0.3f" "3.141592653579"    //保留三位小数
printf "%.3f"  "3.141592653579"    //保留三位小数
printf "%.2f"  "3.141592653579"    //保留两位小数
printf "%.1f"  "3.141592653579"    //保留一位小数
printf "%.0f"  "3.141592653579"    //取整数

注:保留几位小数都是会四舍五入的

uniq

对于命令输出的字符冗余部分进行处理

注:只对有排序后的文件有用

vb里有实验素材,就是这些无序的数字

-d #显示重复的行
sort  -n vb  | uniq   -d
-u #显示唯一的行
sort  -n vb  | uniq   -u

-c #合并重复并统计重复个数
sort  -n vb  | uniq   -c

cut

用户对字符的截取

生成实验文件,我是从/etc/passwd中复制出来的

cut -d : -f 1 ./test

 指定分割符为 : 指定显示的列为第1列 对当前目录下的test文件作用

 指定分割符为 : 指定显示的列为第1列到第3列 对当前目录下的test文件作用 

cut -d : -f 1-3 ./test

 指定分割符为 : 指定显示的列为第3列到最后一列 对当前目录下的test文件作用

cut -d : -f 3- ./test

 指定分割符为 : 指定显示的列为第1列和第3列 对当前目录下的test文件作用

cut -d : -f 1,3 ./test

第一个字符到第四个字符

cut -c 1-4 ./test

第一个字符和第四个字符

cut -c 1,4 ./test

首字符到第八个字符

cut -c -8 ./test

第八个字符到末尾字符

cut -c 8- ./test

xargs

xargs 命令作用是将标准输入数据转换成命令行参数,能够处理管道或者标准输入并将其转换成特定命令的命令参数

原本echo的输出通过管道给touch是不能进行生成文件的操作的

所以我们需要用xargs来承接给touch(等那些不能直接接返回输出进行操作的命令)命令

echo /mnt/vb{1..3} | xargs touch

多行输入单行输出

xargs < ./vb

 指定每行输出个数

xargs -n 3  < ./vb

-n 3就是指定每行输出个数为3个 

指定分隔符

echo "vb:vb:vb" | xargs -d :

指定的是:,输出时将删除分隔符再输出 

echo "aaa:abc:cba:bba" | xargs -d a

同样如果用了字符a来进行分割的话,可以看到下方效果显示,将所有的字符a删去空位符替代并输出

用字符代替接收值

 ls /mnt/* | xargs -I word rm -fr  word

转义

在shell中有很多本身有特殊功能的字符,比如空格井号等等
如果在给变量赋值或执行命令使用时我们只想使用这些符号本身那么就需要用到转义或引用
在shell中反斜杠表示转义,每个反斜杠只能转义一个字符
在shell中单引号表示强引用,我们可以把它看作批量转义,在单引号内的所有字符被视为字符本身
在shel中双引号表示弱引用,其和单引号的区别在于不能引用(\!$)

单个转义和多个转义

单个转义

可以用\

echo #helloworldecho \#helloworld

 

当我们需要转义一串字符中含有空格断开的一个井号时

我们需要用到多个转义

"XXXXXXXXX" 

注:要想打出\,则需要用'\',而不是"\"

同样的$,需要'$'才能转义,而"$"会被注释

变量

如果没加local参数

环境级别变量只在当前运行的shell中生效,shell关闭变量被释放

用户级变量只有登录系统的指定用户,此变量才生效

系统级变量是系统中的永久设定,所有用户都可以使用,系统变量通常被保存到/etc/profile中

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

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

相关文章

PHP与MYSQL结合中中的一些常用函数,HTTP协议定义,PHP进行文件编程,会话技术

MYSQL&#xff1a; 查询函数: 执行查询语句: 1.mysql_query("SQL语法"); 凡是执行操作希望拿到数据库返回的数据进行展示的(结果返回: 数据结果); 2.执行结果的处理:成功为结果集&#xff0c;失败为false; 成功返回结果:SQL指令没有错误&#xff0c;但是查询结果…

数学分析——一致性(均匀性)和收敛

目录 1. 连续函数 1.1 连续函数的定义 1.2 连续函数的性质 1.2.1 性质一 1.2.2 性质二 1.2.3 性质三 1.2.4 性质四 2. 一致连续函数 2.1 一致连续函数的定义 2.2 一致连续性定理(小间距定理)(一致连续函数的另一种定义) 2.3 一致连续性判定法 2.4 连…

湖北理元理律师事务所:企业债务优化的科学路径与人文关怀

湖北理元理律师事务所&#xff1a;企业债务优化的科学路径与人文关怀 在中小企业经营压力增大的背景下&#xff0c;如何平衡债务清偿与员工生计成为关键课题。湖北理元理律师事务所联合计划集团公司&#xff0c;为服务企业设计了一套兼顾法律合规性与民生保障的债务解决方案&a…

树莓派安装openwrt搭建软路由(ImmortalWrt固件方案)

&#x1f923;&#x1f449;我这里准备了两个版本的openwrt安装方案给大家参考使用&#xff0c;分别是原版的OpenWrt固件以及在原版基础上进行改进的ImmortalWrt固件。推荐使用ImmortalWrt固件&#xff0c;当然如果想直接在原版上进行开发也可以&#xff0c;看个人选择。 &…

一键净化Excel数据:高性能Python脚本实现多核并行清理

摘要 本文分享两个基于Python的Excel数据净化脚本&#xff0c;通过多进程并行技术清除工作表内不可见字符、批注、单元格样式等冗余内容&#xff0c;利用OpenPyXL实现底层操作&#xff0c;结合tqdm进度条和进程级任务分配&#xff0c;可快速处理百万级单元格数据。适用于数据分…

【Netty】EventLoopGroup

在Netty的ServerBootstrap中设置两个EventLoopGroup的作用是将网络操作的两个关键阶段分离到不同的线程组中处理&#xff0c;从而优化性能并简化并发控制。具体来说&#xff1a; 1. 两个EventLoopGroup的角色 第一个EventLoopGroup&#xff08;通常称为bossGroup&#xff09;&…

【前端】Vue中使用CKeditor作为富文本编辑器

官网https://ckeditor.com/ 此处记录一下我在使用的时候具体初始化的代码。 <template><div><textarea :id"id"></textarea></div> </template><script> export default {name: CkEditor,data: function () {return {id:…

前端面经 websocket

应用层协议&#xff0c;实现一个TCP连接上的全双工通信&#xff0c;实时通讯 之前的实时WEB 实现轮询 增加轮询频率 ws wss 明文版本 和 密文版本 特点 # 1 头部小 2 更注重实时性

【笔记】suna部署之获取 Supabase API key 和 project URL

#工作记录 Supabase | The Open Source Firebase Alternative 一、注册与登录 方式一&#xff1a;GitHub 授权登录 在登录页面选择 “继续使用 GitHub” &#xff0c;跳转到 GitHub 授权页面&#xff08;如图 5 所示&#xff09;。确认 “Supabase 的想要访问您的 [账户名] 帐…

爬虫工具链的详细分类解析

以下是针对爬虫工具链的详细分类解析&#xff0c;涵盖静态页面、动态渲染和框架开发三大场景的技术选型与核心特性&#xff1a; &#x1f9e9; 一、静态页面抓取&#xff08;HTML结构固定&#xff09; 工具组合&#xff1a;Requests BeautifulSoup 适用场景&#xff1a;目标数…

STM32F407寄存器操作(ADC非连续扫描模式)

1.前言 书接上回&#xff0c;在看手册的时候我突然发现手册上还描述了另一种ADC扫描模式&#xff0c;即非连续扫描模式&#xff0c;想着连续扫描模式都已经探索过了&#xff0c;那就顺手把非非连续模式研究一下吧。 2.理论 我们先看看手册&#xff0c;这里我就以规则通道举例…

spring切面

概念 两个特点&#xff1a; IOC控制反转AOP主要用来处理公共的代码 例如一个案例就是添加用户&#xff0c;重复的代码包含了记录日志、事务提交和事务回滚等&#xff0c;都是重复的&#xff0c;为了简单&#xff0c;交给AOP来做。 即将复杂的需求分解出不同方面&#xff0c…

[Python] Python中的多重继承

文章目录 Lora中的例子 Lora中的例子 https://github.com/michaelnny/QLoRA-LLM/blob/main/qlora_llm/models/lora.py#L211C1-L243C10如果继承两个父类&#xff0c;并且父类的__init__参数不一样&#xff0c;则可以显式的调用父类init&#xff1b;如果用super().__init__()则需…

rsync服务的搭建

目录 一、rsync介绍 rsync的安装 二、rsync的语法 三、rsync命令使用 1. 本机同步 2. 远程同步 四、rsync作为服务使用 1、尝试启动rsync程序 2、rsync的配置文件介绍 注意事项&#xff1a; 3. rsyncinotify实时同步 3.依赖服务托管xinetd&#xff08;CentOS 6中rs…

【C/C++】面试基础题目收集

C 软件开发面试中常见的刷题题目通常可分为以下几大类&#xff1a;数据结构与算法、系统编程、面向对象设计、C 语言特性、并发编程等。 &#x1f9e0; 一、数据结构与算法&#xff08;力扣/牛客经典题&#xff09; 掌握 STL 和底层结构实现能力&#xff1a; &#x1f4cc; 数…

将手机网络经USB数据线和本地局域网共享给华为AP6050DN无线接入点

引言 由于最近装毕的新家所在的小区未能及时通宽带,于是家中各类无线设备如何上网就成了首要要解决的问题。 鉴于家中要联网的设备多、类型杂、支持频段也不一,总是开手机热点不是回事儿,于是就想着把手机网络引至华为AP6050DN无线接入点中,让家中所有的无线设备都能快速高…

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​

深度优先搜索 导读&#xff1a;从广度到深度&#xff0c;探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语&#xff1a;深潜与回溯&#xff0c;揭开图论世界的另一面 导读&#xff1a;从广度到深度&#xff0c;…

Flink CEP实践总结:使用方法、常见报错、优化与难点应对

Flink CEP实践总结&#xff1a;使用方法、常见报错、优化与难点应对 随着实时数据分析需求的提升&#xff0c;Flink CEP&#xff08;Complex Event Processing&#xff0c;复杂事件处理&#xff09;成为事件流检测中的利器。本文结合实际项目经验&#xff0c;总结Flink CEP的基…

Python数据类型详解:从字符串到布尔值,一网打尽

Python是现代编程语言中非常流行的一种&#xff0c;它的语法简洁、易懂&#xff0c;非常适合初学者。而在Python编程中&#xff0c;“数据类型”是最基础也是最重要的概念。理解这个概念&#xff0c;将为你之后的编程打下坚实的基础。 1. 什么是数据类型&#xff1f; 在Pytho…

python打卡day42

Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 在深度学习中&#xff0c;我们经常需要查看或修改模型中间层的输出或梯度&#xff0c;但标准的前向传播和反向传播过程通常是一个黑盒&#xff0c;很难直接访问中间层的信息。PyT…