Linux中的shell脚本

news2025/6/3 20:32:59

什么是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 #helloworld

echo \#helloworld

 

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

我们需要用到多个转义

"XXXXXXXXX" 

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

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

变量

如果没加local参数

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

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

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

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

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

相关文章

dvwa3——CSRF

LOW&#xff1a; 先尝试change一组密码&#xff1a;123456 修改成功&#xff0c;我们观察上面的url代码 http://localhost/DVWA/vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange# 将password_new部分与password_conf部分改成我们想要的…

【学习笔记】Transformer

学习的博客&#xff08;在此致谢&#xff09;&#xff1a; 初识CV - Transformer模型详解&#xff08;图解最完整版&#xff09; 1 整体结构 Transformer由Encoder和Decoder组成&#xff0c;分别包含6个block。 Transformer的工作流程大体如下&#xff1a; 获取每个单词的em…

欢乐熊大话蓝牙知识12:用 BLE 打造家庭 IoT 网络的三种方式

🏠 用 BLE 打造家庭 IoT 网络的三种方式 不止是“蓝牙耳机”,BLE 还能把你家“点亮成精”! 👋 前言:BLE 不只是蓝牙耳机的“代名词” 蓝牙?很多人一听就联想到“耳机连接失败请重试”。但你知道吗?现在 BLE(Bluetooth Low Energy)在智能家居中已经偷偷搞起了大事情。…

02.上帝之心算法用GPU计算提速50倍

本文介绍了上帝之心的算法及其Python实现&#xff0c;使用Python语言的性能分析工具测算性能瓶颈&#xff0c;将算法最耗时的部分重构至CUDA C语言在纯GPU上运行&#xff0c;利用GPU核心更多并行更快的优势显著提高算法运算速度&#xff0c;实现了结果不变的情况下将耗时缩短五…

MES管理系统:Java+Vue,含源码与文档,实现生产过程实时监控、调度与优化,提升制造企业效能

前言&#xff1a; 在当今竞争激烈的制造业环境中&#xff0c;企业面临着提高生产效率、降低成本、提升产品质量以及快速响应市场变化等多重挑战。MES管理系统作为连接企业上层计划管理系统与底层工业控制之间的桥梁&#xff0c;扮演着至关重要的角色。它能够实时收集、分析和处…

LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++

https://leetcode.cn/problems/search-a-2d-matrix/description/ 一、题目分析 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 ta…

VectorStore 组件深入学习与检索方法

考虑到目前市面上的向量数据库众多&#xff0c;每个数据库的操作方式也无统一标准&#xff0c;但是仍然存在着一些公共特征&#xff0c;LangChain 基于这些通用的特征封装了 VectorStore 基类&#xff0c;在这个基类下&#xff0c;可以将方法划分成 6 种&#xff1a; 相似性搜…

HackMyVM-First

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 06:13 EDT Nmap scan report for 192.168.43.1 Host is up (0.0080s latency). MAC Address: C6:45:66:05:91:88 (Unknown) …

跨平台浏览器集成库JxBrowser 支持 Chrome 扩展程序,高效赋能 Java 桌面应用

JxBrowser 是 TeamDev 开发的跨平台库&#xff0c;用于在 Java 应用程序中集成 Chromium 浏览器。它支持 HTML5、CSS3、JavaScript 等&#xff0c;具备硬件加速渲染、双向 Java 与 JavaScript 连接、丰富的事件监听等功能&#xff0c;能处理网页保存、打印等操作&#xff0c;助…

WEBSTORM前端 —— 第3章:移动 Web —— 第3节:移动适配

目录 一、移动Web基础 1.谷歌模拟器 2.屏幕分辨率 3.视口 4.二倍图 二、适配方案 三、rem 适配方案 四、less 1.less – 简介 2.less – 注释 3.less – 运算 4.less – 嵌套 5.less – 变量 6.less – 导入 7.less – 导出 8.less – 禁止导出 五…

弱光环境下如何手持相机拍摄静物:摄影曝光之等效曝光认知

写在前面 博文内容为一次博物馆静物拍摄笔记的简单总结内容涉及&#xff1a;弱光环境拍摄静物如何选择&#xff0c;以及等效曝光的认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我看远山&#xff0c;远山悲悯 持续分享技术干货&#xff0c;感兴趣小伙伴可以关注下 _ 采…

【HTML】基础学习【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 102 篇 - Date: 2025 - 05 - 31 Author: 郑龙浩/仟墨 文章目录 HTML 基础学习一 了解HTML二 HTML的结构三 HTML标签1 标题2 文本段落3 换行4 加粗、斜体、下划线5 插入图片6 添加链接7 容器8 列表9 表格10 class类 HTML 基础学习 一 了解HTML 一个网页分为为三部分&…

Next.js路由导航完全指南

在前端框架&#xff08;如 React、Vue 等&#xff09;或移动端开发中&#xff0c;路由系统是实现页面 / 界面导航的核心机制。Next.js 采用 文件系统路由&#xff08;File System Routing&#xff09;&#xff0c;即根据项目目录结构自动生成路由。 Next.js 目前有两套路由解决…

五、web安全--XSS漏洞(1)--XSS漏洞利用全过程

本文章仅供学习交流&#xff0c;如作他用所承受的法律责任一概与作者无关1、XSS漏洞利用全过程 1.1 寻找注入点&#xff1a;攻击者首先需要找到目标网站中可能存在XSS漏洞的注入点。这些注入点通常出现在用户输入能够直接输出到页面&#xff0c;且没有经过适当过滤或编码的地方…

【C++高级主题】命令空间(六):重载与命名空间

目录 一、候选函数与命名空间&#xff1a;重载的 “搜索范围” 1.1 重载集的构成规则 1.2 命名空间对候选函数的隔离 二、重载与using声明&#xff1a;精准引入单个函数 2.1 using声明与重载的结合 2.2 using声明的冲突处理 三、重载与using指示&#xff1a;批量引入命名…

Tomcat运行比较卡顿进行参数调优

在Tomcat conf/catalina.bat或catalina.sh中 的最上面增加参数 1. 初步调整参数&#xff08;缓解问题&#xff09; set JAVA_OPTS -Xms6g -Xmx6g -Xmn3g # 增大新生代&#xff0c;减少对象过早晋升到老年代 -XX:MetaspaceSize256m -XX:MaxMetaspaceS…

C++四种类型转换方式

const_cast,去掉&#xff08;指针或引用&#xff09;常量属性的一个类型转换,但需要保持转换前后类型一致static_cast,提供编译器认为安全的类型转换(最常使用)reinterpret_cast,类似于c语言风格的强制类型转换&#xff0c;不保证安全;dynamic_cast,主要用于继承结构中&#xf…

Canvas: trying to draw too large(256032000bytes) bitmap.

1、错误展示 测试了一下一张图片的显示&#xff0c;发现二个手机上测试的结果不一样&#xff0c;配制好一些的手机&#xff0c;直接就通过&#xff0c;但是屏小一些的测试手机上&#xff0c;直接报下面的错误。 这个意思是图片太大了&#xff0c;直接就崩了。 2、代码编写 lo…

网络协议之办公室网络是怎样的?

写在前面 本文来看下办公室网络怎样的。 1&#xff1a;正文 如果是在一个寝室中组件一个局域网还是比较简单的&#xff0c;只需要一个交换机&#xff0c;然后大家的电脑全部连接到这个交换机上就行了&#xff0c;之后所有的电脑设置CIDR保证在一个局域网就可以了。但是&#…

uni-data-picker级联选择器、fastadmin后端api

记录一个部门及部门人员选择的功能&#xff0c;效果如下&#xff1a; 组件用到了uni-ui的级联选择uni-data-picker 开发文档&#xff1a;uni-app官网 组件要求的数据格式如下&#xff1a; 后端使用的是fastadmin&#xff0c;需要用到fastadmin自带的tree类生成部门树 &#x…